Token 엔드포인트 - Amazon Cognito

Token 엔드포인트

/oauth2/token 엔드포인트는 사용자의 토큰을 가져옵니다.

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에 대한 권한 부여 헤더로 djc98u3jiedmi283eu928:abcdef01234567890 문자열의 Base64 인코딩 버전을 사용하는 클라이언트 암호 abcdef01234567890을 포함합니다.

Authorization: Basic ZGpjOTh1M2ppZWRtaTI4M2V1OTI4OmFiY2RlZjAxMjM0NTY3ODkw
Content-Type

항상 'application/x-www-form-urlencoded'여야 합니다.

본문의 요청 파라미터

grant_type

허용 유형입니다.

authorization_code, refresh_token 또는 client_credentials가 있습니다. 앱 클라이언트에서 요청된 범위가 활성화되고 클라이언트 암호를 구성하고 client_credentials 권한을 부여한 경우 Token 엔드포인트에서 사용자 지정 범위에 대한 액세스 토큰을 요청할 수 있습니다.

필수.

client_id

사용자 풀에서 앱 클라이언트의 ID입니다. 사용자를 인증한 것과 동일한 앱 클라이언트를 지정해야 합니다.

클라이언트가 퍼블릭이고 보안 암호가 없거나 client_secret_post 권한 부여를 사용하려는 경우 client_secret과 함께 필수입니다.

client_secret

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

scope

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

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

redirect_uri

/oauth2/authorize에서 authorization_code를 얻기 위해 사용했던 redirect_uri와 같아야 합니다.

grant_typeauthorization_code인 경우에만 필수입니다.

refresh_token

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

code

grant_typeauthorization_code인 경우 필수입니다.

code_verifier

증명 키입니다.

grant_typeauthorization_code이며 PKCE를 통해 권한 부여 코드가 요청된 경우 필수입니다.

긍정 응답이 있는 요청 예제

인증 코드를 토큰으로 교환

샘플 요청

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

샘플 응답

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

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

클라이언트 자격 증명을 액세스 토큰으로 교환

샘플 요청

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

샘플 응답

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

PKCE를 통한 인증 코드 권한 부여를 토큰으로 교환

샘플 요청

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

샘플 응답

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

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

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

샘플 요청

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

샘플 응답

HTTP/1.1 200 OK Content-Type: application/json { "id_token":"eyJz9sdfsdfsdfsd", "access_token":"dmcxd329ujdmkemkd349r", "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 이외의 것인 경우 반환됩니다.