비밀번호 부여 유형 구현

현재 Apigee Edge 문서가 표시되고 있습니다.
Apigee X 문서로 이동
정보

리소스 소유자 비밀번호(또는 '비밀번호') 부여 유형은 주로 앱을 신뢰할 수 있는 경우에 사용됩니다. 이 구성에서 사용자는 리소스 서버 사용자 인증 정보(사용자 이름/비밀번호)를 클라이언트 앱에 제공하여 Apigee Edge에 액세스 토큰 요청으로 전송합니다. ID 서버는 사용자 인증 정보의 유효성을 검사하고 유효한 경우 Edge는 액세스 토큰을 발급하여 앱으로 반환합니다.

주제 정보

이 주제에서는 OAuth 2.0 리소스 소유자 비밀번호 권한 부여 유형 흐름에 대한 일반적인 설명과 개요를 제공하고 Apigee Edge에서 이 흐름을 구현하는 방법을 설명합니다.

유용한 몇 가지 예시

  • accesstoken 요청: 비밀번호 부여 유형: 토큰 요청을 작성하는 방법, 비밀번호 부여 유형에 대한 OAuthV2 정책 구성 방법, Edge에서 정책의 엔드포인트를 구성하는 방법을 보여줍니다.
  • oauth-validate-key-secret: Edge에 배포하고 사용해 볼 수 있는 GitHub의 샘플 프록시입니다. 비밀번호 부여 유형이 있는 엔드 투 엔드 예시이며, 사용자 인증 정보를 ID 공급업체에 전송하기 전에 클라이언트 앱의 사용자 인증 정보(키/보안 비밀)를 인증하는 권장사항을 보여줍니다.

동영상

동영상: 비밀번호 부여 유형 구현에 관한 동영상을 확인하세요.

사용 사례

이 권한 유형은 사용자가 앱에 리소스 서버 사용자 인증 정보를 제공해야 하므로 신뢰할 수 있는 앱 또는 권한이 있는 앱을 대상으로 합니다. 일반적으로 앱에서는 사용자가 사용자 인증 정보를 입력하는 로그인 화면이 제공됩니다.

흐름도

다음 흐름 다이어그램은 Apigee Edge가 승인 서버로 사용되는 리소스 소유자 비밀번호 권한 부여 유형의 흐름을 보여줍니다.

팁: 이 다이어그램의 더 큰 버전을 보려면 마우스 오른쪽 버튼으로 클릭하여 새 탭에서 열거나, 저장하고 이미지 뷰어에서 여세요.

비밀번호 부여 유형 흐름의 단계

다음은 Apigee Edge가 승인 서버로 사용되는 비밀번호 부여 유형을 구현하는 데 필요한 단계를 요약한 것입니다.

기본 요건: 클라이언트 ID와 클라이언트 보안 비밀번호 키를 가져오려면 클라이언트 앱을 Apigee Edge를 통해 등록해야 합니다. 자세한 내용은 클라이언트 앱 등록을 참조하세요.

1. 사용자가 흐름을 시작하고 사용자 인증 정보를 입력

앱이 사용자의 보호된 리소스에 액세스해야 하는 경우 (예: 사용자가 앱의 버튼 클릭) 사용자는 로그인 양식으로 리디렉션됩니다.

2. 앱이 Apigee Edge에서 액세스 토큰을 요청

앱이 사용자 인증 정보를 포함한 액세스 토큰 요청을 Apigee Edge의 GenerateAccessToken 엔드포인트로 보냅니다.

다음은 이 부여 유형에 필요한 매개변수가 포함된 샘플 POST 요청입니다.

$ curl -i \
  -X POST \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  -H 'Authorization: Basic c3FIOG9vSGV4VHo4QzAySVg5T1JvNnJoZ3ExaVNyQWw6WjRsanRKZG5lQk9qUE1BVQ' \
  -d 'grant_type=password&username=the-user-name&password=the-users-password' \
  https://docs-test.apigee.net/oauth/token

curl에 -u 옵션을 사용하여 base64 인코딩 기본 인증 헤더를 만들어 명령어가 다음과 같이 수행될 수도 있습니다.

$ curl -i \
  -X POST \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  -u sqH8ooHexTz8C02IX9ORo6rhgq1iSrAl:Z4ljtJdneBOjPMAU \
  -d 'grant_type=password&username=the-user-name&password=the-users-password' \
  https://docs-test.apigee.net/oauth/token

(이러한 명령어는 모두 한 줄에 있어야 합니다.)

클라이언트 사용자 인증 정보가 HTTP 기본 인증 헤더에 인코딩되는 동안에 사용자 인증 정보는 양식 매개변수에 포함됩니다. 필수 기본 인증 헤더에 대한 세부정보를 포함하여 이 API 호출에 대한 자세한 설명은 '액세스 토큰 및 승인 코드 요청'의 비밀번호 부여 섹션을 참조하세요.

3. Edge가 클라이언트 앱의 유효성을 검사

사용자의 아이디와 비밀번호를 ID 공급업체에 전송하기 전에 Edge는 요청을 수행하는 클라이언트 앱이 안정적이고 신뢰할 수 있는 앱인지 알아야 합니다. 이를 위한 한 가지 방법은 API 호출에 API 키 인증을 사용하는 것입니다. 경우에 따라 클라이언트 키와 보안 비밀의 유효성을 검사하는 것이 좋습니다. GitHub의 api-platform-samples 저장소에 이러한 대체 기법을 보여주는 샘플 프록시가 있습니다.

4. Edge가 로그인 사용자 인증 정보를 처리

클라이언트 앱의 유효성이 검사되면 서비스 콜아웃 또는 자바스크립트 정책을 사용하여 ID 서비스를 호출하고 사용자 인증 정보를 전송할 수 있습니다. 예를 들어 사용자 인증 정보의 유효성을 검사하는 데 사용할 LDAP 서비스 또는 모든 서비스일 수 있습니다. 이러한 정책에 대한 자세한 내용은 변수 추출 정책자바스크립트 정책을 참조하세요.

ID 서비스가 사용자 인증 정보의 유효성을 검사하고 200 응답을 반환하면 Edge가 요청을 계속 처리합니다. 그렇지 않으면 Edge에서 처리를 중지하고 클라이언트 앱에 오류를 반환합니다.

5. OAuthV2 정책 실행

사용자 인증 정보가 유효한 경우 다음 처리 단계는 비밀번호 부여 유형에 구성된 OAuthV2 정책을 실행하는 것입니다. 예를 들면 다음과 같습니다. <UserName> 및 <PassWord> 요소는 필수이며 ExtractVariables 정책으로 저장된 흐름 변수에서 검색할 수 있습니다. 이 정책의 자세한 참조 정보는 OAuthV2 정책을 참조하세요.

<OAuthV2 name="GetAccessToken">
  <Operation>GenerateAccessToken</Operation>
  <ExpiresIn>360000000</ExpiresIn> 
  <SupportedGrantTypes> 
     <GrantType>password</GrantType> 
  </SupportedGrantTypes> 
  <GrantType>request.queryparam.grant_type</GrantType> 
  <UserName>login</UserName>
  <PassWord>password</PassWord>
  <GenerateResponse/> 
</OAuthV2>

이 정책이 성공하면 액세스 토큰이 포함된 클라이언트에 응답이 다시 생성됩니다. 응답은 JSON 형식입니다. 예를 들면 다음과 같습니다. access_token은 다음 요소 중 하나입니다.

{
    "issued_at": "1420258685042",
    "scope": "READ",
    "application_name": "ce1e94a2-9c3e-42fa-a2c6-1ee01815476b",
    "refresh_token_issued_at": "1420258685042",
    "status": "approved",
    "refresh_token_status": "approved",
    "api_product_list": "[PremiumWeatherAPI]",
    "expires_in": "1799",
    "developer.email": "tesla@weathersample.com",
    "organization_id": "0",
    "token_type": "BearerToken",
    "refresh_token": "IFl7jlijYuexu6XVSSjLMJq8SVXGOAAq",
    "client_id": "5jUAdGv9pBouF0wOH5keAVI35GBtx3dT",
    "access_token": "I6daIgMSiUgYX1K2qgQWPi37ztS6",
    "organization_name": "docs",
    "refresh_token_expires_in": "0",
    "refresh_count": "0"
}

6. 클라이언트가 보호된 API를 호출

이제 유효한 액세스 코드를 사용하여 클라이언트가 보호된 API를 호출할 수 있습니다. 이 시나리오에서는 Apigee Edge(프록시)로 요청이 전송되며, Edge는 대상 리소스 서버에 API 호출을 전달하기 전에 액세스 토큰의 유효성 검사를 담당합니다. 액세스 토큰은 승인 헤더로 전달됩니다. 예를 들면 다음과 같습니다.

$ curl -H "Authorization: Bearer I6daIgMSiUgYX1K2qgQWPi37ztS6
" http://{org_name}-test.apigee.net/weather/forecastrss?w=12797282