토큰 발급자 엔드포인트 - Amazon Cognito

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

토큰 발급자 엔드포인트

의 OAuth 2.0 토큰 엔드포인트는 JSON 웹 토큰()을 /oauth2/token 발행합니다JWTs. 이러한 토큰은 사용자 풀을 사용한 인증의 최종 결과입니다. 여기에는 사용자(ID 토큰), 사용자의 액세스 수준(액세스 토큰) 및 로그인 세션을 유지할 수 있는 사용자의 권한(토큰 새로 고침)에 대한 정보가 포함되어 있습니다. OpenID Connect(OIDC) 의존 당사자 라이브러리는 이 엔드포인트에 대한 요청 및 응답 페이로드를 처리합니다. 토큰은 검증 가능한 인증 증명, 프로필 정보 및 백엔드 시스템에 대한 액세스 메커니즘을 제공합니다.

사용자 풀 OAuth 2.0 권한 부여 서버는 토큰 엔드포인트에서 다음 유형의 세션으로 JSON 웹 토큰(JWTs)을 발급합니다.

  1. 권한 부여 코드 부여 요청을 완료한 사용자입니다. 코드를 성공적으로 사용하면 ID, 액세스 및 새로 고침 토큰이 반환됩니다.

  2. 클라이언트 자격 증명 부여를 완료한 Machine-to-machine (M2M) 세션입니다. 클라이언트 암호로 인증에 성공하면 액세스 토큰이 반환됩니다.

  3. 이전에 로그인하고 새로 고침 토큰을 받은 사용자. 새로 고침 토큰 인증은 새 ID와 액세스 토큰을 반환합니다.

    참고

    호스팅 UI 또는 페더레이션을 통해 권한 부여 코드 권한 부여로 로그인하는 사용자는 항상 토큰 엔드포인트에서 토큰을 새로 고칠 수 있습니다. API 작업으로 로그인InitiateAuth하고 기억된 디바이스가 사용자 풀에서 활성화되지 않은 경우 토큰 엔드포인트로 토큰을 새로 고칠 AdminInitiateAuth 수 있는 사용자. 기억된 디바이스가 활성 상태인 경우 InitiateAuth 또는 AdminInitiateAuth API 요청REFRESH_TOKEN_AUTH에서 AuthFlow 의 로 토큰을 새로 고칩니다.

도메인을 사용자 풀에 추가하면 토큰 엔드포인트를 공개적으로 사용할 수 있게 됩니다. HTTP POST 요청을 수락합니다. 애플리케이션 보안을 위해 권한 부여 코드 로그인 이벤트PKCE와 함께 를 사용합니다. PKCE 는 권한 부여 코드를 전달하는 사용자가 인증된 사용자인지 확인합니다. 에 대한 자세한 내용은 IETF RFC 7636을 PKCE참조하세요.

IDs 에서 사용자 풀 앱 클라이언트 및 해당 권한 부여 유형, 클라이언트 보안 암호, 승인된 범위 및 클라이언트에 대해 자세히 알아볼 수 있습니다앱 클라이언트를 사용한 애플리케이션별 설정. 에서 M2M 권한 부여, 클라이언트 자격 증명 권한 부여 및 액세스 토큰 범위를 사용한 권한 부여에 대해 자세히 알아볼 수 있습니다범위, M2M 및 리소스 서버 APIs 포함.

액세스 토큰에서 사용자에 대한 정보를 검색하려면 userInfo 엔드포인트 또는 에 전달합니다. GetUser API 요청.

POST /oauth2/토큰

/oauth2/token 엔드포인트는 HTTPS POST만 지원합니다. 앱은 사용자 브라우저를 통하지 않고 직접 이 엔드포인트에 요청을 수행합니다.

토큰 엔드포인트는 client_secret_basicclient_secret_post 인증을 지원합니다. OpenID Connect 사양에 대한 자세한 내용은 클라이언트 인증 섹션을 참조하세요. OpenID Connect 사양의 Token 엔드포인트에 대한 자세한 내용은 토큰 엔드포인트를 참조하세요.

헤더의 요청 파라미터

Authorization

클라이언트가 보안 암호를 발급받은 경우 클라이언트는 권한 부여 헤더client_secretclient_id 및 를 client_secret_basic HTTP 권한 부여로 전달할 수 있습니다. 요청 본문에 client_secret_post 권한 부여로 client_idclient_secret을 포함할 수도 있습니다.

인증 헤더 문자열은 기본 Base64Encode(client_id:client_secret) 입니다. 다음 예제는 문자열 의 Base64-encoded 버전을 abcdef01234567890사용하여 클라이언트 보안 암호 가 djc98u3jiedmi283eu928 있는 앱 클라이언트에 대한 권한 부여 헤더입니다djc98u3jiedmi283eu928:abcdef01234567890.

Authorization: Basic ZGpjOTh1M2ppZWRtaTI4M2V1OTI4OmFiY2RlZjAxMjM0NTY3ODkw
Content-Type

이 파라미터의 값을 'application/x-www-form-urlencoded'으로 설정합니다.

본문의 요청 파라미터

grant_type

(필수) 요청하려는 OIDC 권한 부여 유형입니다.

authorization_code, refresh_token 또는 client_credentials가 있습니다. 다음 조건에서 토큰 엔드포인트에서 사용자 지정 범위에 대한 액세스 토큰을 요청할 수 있습니다.

  • 앱 클라이언트 구성에서 요청된 범위를 활성화했습니다.

  • 클라이언트 보안 암호로 앱 클라이언트를 구성했습니다.

  • 앱 클라이언트에서 클라이언트 보안 인증 권한 부여를 활성화합니다.

client_id

(선택 사항) 사용자 풀에 있는 앱 클라이언트의 ID입니다. 사용자를 인증한 것과 동일한 앱 클라이언트를 지정합니다.

클라이언트가 퍼블릭이고 보안 암호가 없거나 client_secret client_secret_post 권한이 있는 경우 이 파라미터를 제공해야 합니다.

client_secret

(선택 사항) 사용자를 인증한 앱 클라이언트의 클라이언트 암호입니다. 앱 클라이언트에 클라이언트 암호가 있고 Authorization 헤더를 보내지 않은 경우 필수입니다.

scope

(선택 사항) 앱 클라이언트와 연결된 모든 사용자 지정 범위를 조합할 수 있습니다. 요청한 모든 범위는 앱 클라이언트에 대해 활성화되어야 합니다. 그렇지 않은 경우 Amazon Cognito는 이를 무시합니다. 클라이언트가 범위를 요청하지 않으면 인증 서버는 앱 클라이언트 구성에서 권한을 부여한 모든 사용자 지정 범위를 할당합니다.

grant_typeclient_credentials인 경우에만 사용됩니다.

redirect_uri

(선택 사항) authorization_code에서 가져오는 데 사용된 redirect_uri 것과 동일해야 합니다/oauth2/authorize.

grant_type인 경우 이 파라미터를 제공해야 합니다authorization_code.

refresh_token

(선택 사항) 사용자 세션에 대한 새 액세스 및 ID 토큰을 생성하려면 /oauth2/token 요청의 refresh_token 파라미터 값을 동일한 앱 클라이언트에서 이전에 발급된 새로 고침 토큰으로 설정합니다.

code

(선택 사항) 권한 부여 코드 권한 부여의 권한 부여 코드입니다. 권한 부여 요청에 grant_type의 가 포함된 경우 이 파라미터를 제공해야 합니다authorization_code.

code_verifier

(선택 사항) 를 사용하여 권한 부여 코드 권한 부여 요청code_challenge에서 를 계산하는 데 사용한 임의 값입니다PKCE.

긍정적 응답이 있는 요청의 예

인증 코드를 토큰으로 교환

예 - POST 요청

POST https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/token& Content-Type='application/x-www-form-urlencoded'& Authorization=Basic ZGpjOTh1M2ppZWRtaTI4M2V1OTI4OmFiY2RlZjAxMjM0NTY3ODkw grant_type=authorization_code& client_id=1example23456789& code=AUTHORIZATION_CODE& redirect_uri=com.myclientapp://myclient/redirect

예 - 응답

HTTP/1.1 200 OK Content-Type: application/json { "access_token":"eyJra1example", "id_token":"eyJra2example", "refresh_token":"eyJj3example", "token_type":"Bearer", "expires_in":3600 }
참고

토큰 엔드포인트는 grant_typeauthorization_code인 경우에만 refresh_token을 반환됩니다.

클라이언트 보안 인증 정보를 액세스 토큰으로 교환: 권한 부여 헤더의 클라이언트 암호

예 - POST 요청

POST https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/token > Content-Type='application/x-www-form-urlencoded'& Authorization=Basic ZGpjOTh1M2ppZWRtaTI4M2V1OTI4OmFiY2RlZjAxMjM0NTY3ODkw grant_type=client_credentials& client_id=1example23456789& scope=resourceServerIdentifier1/scope1 resourceServerIdentifier2/scope2

예 - 응답

HTTP/1.1 200 OK Content-Type: application/json { "access_token":"eyJra1example", "token_type":"Bearer", "expires_in":3600 }

클라이언트 보안 인증 정보를 액세스 토큰으로 교환: 요청 본문의 클라이언트 암호

예 - POST 요청

POST /oauth2/token HTTP/1.1 Content-Type: application/x-www-form-urlencoded X-Amz-Target: AWSCognitoIdentityProviderService.Client credentials request User-Agent: USER_AGENT Accept: / Accept-Encoding: gzip, deflate, br Content-Length: 177 Referer: http://auth.example.com/oauth2/token Host: auth.example.com Connection: keep-alive grant_type=client_credentials&client_id=1example23456789&scope=my_resource_server_identifier%2Fmy_custom_scope&client_secret=9example87654321

예 - 응답

HTTP/1.1 200 OK Content-Type: application/json;charset=UTF-8 Date: Tue, 05 Dec 2023 16:11:11 GMT x-amz-cognito-request-id: 829f4fe2-a1ee-476e-b834-5cd85c03373b { "access_token": "eyJra12345EXAMPLE", "expires_in": 3600, "token_type": "Bearer" }

권한 부여 코드 권한 부여를 로 토큰 PKCE 교환

예 - POST 요청

POST https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/token Content-Type='application/x-www-form-urlencoded'& Authorization=Basic ZGpjOTh1M2ppZWRtaTI4M2V1OTI4OmFiY2RlZjAxMjM0NTY3ODkw grant_type=authorization_code& client_id=1example23456789& code=AUTHORIZATION_CODE& code_verifier=CODE_VERIFIER& redirect_uri=com.myclientapp://myclient/redirect

예 - 응답

HTTP/1.1 200 OK Content-Type: application/json { "access_token":"eyJra1example", "id_token":"eyJra2example", "refresh_token":"eyJj3example", "token_type":"Bearer", "expires_in":3600 }
참고

토큰 엔드포인트는 grant_typeauthorization_code인 경우에만 refresh_token을 반환됩니다.

새로 고침 토큰을 토큰으로 교환

예 - POST 요청

POST https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/token > Content-Type='application/x-www-form-urlencoded'& Authorization=Basic ZGpjOTh1M2ppZWRtaTI4M2V1OTI4OmFiY2RlZjAxMjM0NTY3ODkw grant_type=refresh_token& client_id=1example23456789& refresh_token=eyJj3example

예 - 응답

HTTP/1.1 200 OK Content-Type: application/json { "access_token":"eyJra1example", "id_token":"eyJra2example", "token_type":"Bearer", "expires_in":3600 }
참고

토큰 엔드포인트는 grant_typeauthorization_code인 경우에만 refresh_token을 반환됩니다.

부정 응답 예제

예 - 오류 응답

HTTP/1.1 400 Bad Request Content-Type: application/json;charset=UTF-8 { "error":"invalid_request|invalid_client|invalid_grant|unauthorized_client|unsupported_grant_type" }
invalid_request

요청에 필수 파라미터가 누락되거나, 지원되지 않는 파라미터 값(unsupported_grant_type 아님)이 포함되거나, 잘못되었습니다. 예를 들어, grant_typerefresh_token이지만 refresh_token이 포함되어 있지 않습니다.

invalid_client

클라이언트 인증에 실패했습니다. 예를 들어, 클라이언트가 권한 부여 헤더에 client_idclient_secret을 포함하지만 client_idclient_secret이 있는 클라이언트가 없는 경우입니다.

invalid_grant

새로 고침 토큰이 취소되었습니다.

권한 부여 코드를 이미 사용했거나 해당 코드가 존재하지 않습니다.

앱 클라이언트에는 요청한 범위의 일부 속성에 대한 읽기 액세스 권한이 없습니다. 예를 들어, 앱이 email 범위를 요청하면 앱 클라이언트는 email 속성을 읽을 수 있지만, email_verified 속성은 읽을 수 없습니다.

unauthorized_client

클라이언트가 코드 부여 흐름이나 토큰 새로 고침에 대해 허용되지 않습니다.

unsupported_grant_type

grant_typeauthorization_code 또는 refresh_token 또는 client_credentials 이외의 것인 경우 반환됩니다.