Token 엔드포인트 - Amazon Cognito

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

Token 엔드포인트

/oauth2/token의 OAuth 2.0 토큰 엔드포인트는 JSON 웹 토큰(JWT)을 발급합니다.

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

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

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

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

    참고

    호스팅된 UI에서 또는 페더레이션을 통해 인증 코드 부여로 로그인한 사용자는 언제든지 토큰 엔드포인트에서 토큰을 새로 고칠 수 있습니다. API 작업을 InitiateAuth 통해 로그인한 사용자는 사용자 풀에서 기억된 디바이스가 활성 상태가 아닐 때 토큰 엔드포인트를 사용하여 토큰을 새로 고칠 AdminInitiateAuth 수 있습니다. 기억된 디바이스가 활성 상태인 경우 AuthFlow of REFRESH_TOKEN_AUTH in InitiateAuth 또는 AdminInitiateAuth API 요청으로 토큰을 새로 고치세요.

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

사용자 풀 앱 클라이언트와 해당 권한 부여 유형, 클라이언트 암호, 승인된 범위 및 클라이언트 ID에 대한 자세한 내용은 사용자 풀 앱 클라이언트에서 확인할 수 있습니다. 에서 M2M 인증, 클라이언트 자격 증명 부여, 액세스 토큰 범위를 통한 권한 부여에 대해 자세히 알아볼 수 있습니다. OAuth 2.0 범위 및 리소스 서버를 사용한 API 권한 부여

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

POST /oauth2/token

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

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

헤더의 요청 파라미터

Authorization

클라이언트에 암호가 발급된 경우 클라이언트는 권한 부여 헤더에서 client_secret_basic HTTP 권한 부여로 해당 client_idclient_secret을 전달할 수 있습니다. 요청 본문에 client_secret_post 권한 부여로 client_idclient_secret을 포함할 수도 있습니다.

인증 헤더 문자열은 기본 Base64Encode(client_id:client_secret) 입니다. 다음 예는 djc98u3jiedmi283eu928 Base64로 인코딩된 버전의 문자열을 사용하는 클라이언트 abcdef01234567890 암호가 있는 앱 클라이언트의 인증 헤더입니다. 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_post 권한이 있는 경우 이 매개변수를 제공해야 합니다. client_secret

client_secret

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

scope

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

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

redirect_uri

(선택 사항) 로그인할 때 사용한 redirect_uri 것과 같아야 합니다. authorization_code /oauth2/authorize

있는 경우 grant_type 이 매개변수를 제공해야 authorization_code 합니다.

refresh_token

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

code

(선택 사항) 승인 코드 부여의 인증 코드. 승인 요청에 다음 grant_type 중 하나가 포함된 경우 이 매개변수를 제공해야 authorization_code 합니다.

code_verifier

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

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

인증 코드를 토큰으로 교환

예 — 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 이외의 것인 경우 반환됩니다.