トークンエンドポイント - Amazon Cognito

トークンエンドポイント

/oauth2/token エンドポイントは、ユーザーのトークンを取得します。

POST /oauth2/token

/oauth2/token エンドポイントは HTTPS POST のみをサポートします。ユーザープールクライアントは、ブラウザ経由ではなく、このエンドポイントに直接リクエストを送信します。

トークンエンドポイントは client_secret_basicclient_secret_post をサポートしています。OpenID Connect の仕様の詳細については、「クライアント認証」を参照してください。OpenID Connect 仕様のトークンエンドポイントの詳細については、「トークンエンドポイント」を参照してください。

ヘッダーのリクエストパラメータ

Authorization

クライアントがシークレットで発行された場合、クライアントはその client_id および client_secret をベーシック client_secret_basic 認証として認証ヘッダーに渡す必要があります。また、client_idclient_secretclient_secret_post 認証としてリクエスト本文に含めることもできます。

認証ヘッダー文字列は Basic Base64Encode(client_id:client_secret) です。次の例は、アプリクライアント djc98u3jiedmi283eu928 のクライアントシークレット abcdef01234567890 が付いた認証ヘッダーです。文字列 djc98u3jiedmi283eu928:abcdef01234567890 の Base64 エンコードされたバージョンを使用します。

Authorization: Basic ZGpjOTh1M2ppZWRtaTI4M2V1OTI4OmFiY2RlZjAxMjM0NTY3ODkw
Content-Type

常に 'application/x-www-form-urlencoded' にする必要があります。

本文のリクエストパラメータ

grant_type

付与タイプ。

authorization_coderefresh_token、または client_credentials を指定する必要があります。アプリクライアントでリクエストされたスコープが有効で、クライアントシークレットを設定済みで、client_credentials の付与を許可している場合、トークンエンドポイントからカスタムスコープのアクセストークンをリクエストできます。

必須。

client_id

ユーザープール内のアプリクライアントの ID。ユーザーを認証したのと同じアプリクライアントを指定する必要があります。

クライアントがパブリックでありシークレットがない場合、または client_secretclient_secret_post 認証を使用する場合は必須です。

client_secret

ユーザーを認証したアプリクライアントのクライアントシークレット。アプリケーションクライアントがクライアントシークレットを持っていて、Authorization ヘッダーを送信しなかった場合は必須です。

scope

アプリクライアントに関連付けられた任意のカスタムスコープを組み合わせることができます。リクエストしたスコープは、アプリクライアントに対してアクティブ化する必要があります。そうしないと、Amazon Cognito はそれを無視します。クライアントがスコープをリクエストしない場合、認可サーバーはクライアントに関連付けられているすべてのカスタムスコープを使用します。

オプション。grant_typeclient_credentials である場合にのみ使用されます。

redirect_uri

/oauth2/authorizeauthorization_code を取得するために使用されたものと同じ redirect_uri である必要があります。

grant_typeauthorization_code の場合のみ必須です。

refresh_token

ユーザーのセッションの新しいアクセストークンと ID トークンを生成するには、/oauth2/token リクエストの refresh_token パラメータの値を、同じアプリクライアントから以前に発行された更新トークンに設定します。

コード

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 }
注記

トークンエンドポイントは、refresh_tokengrant_type の場合にのみ authorization_code を返します。

アクセストークンのクライアント認証情報の交換

リクエスト例

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 }
注記

トークンエンドポイントは、refresh_tokengrant_type の場合にのみ authorization_code を返します。

トークン用の更新トークンの交換

リクエスト例

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_coderefresh_token、または client_credentials 以外の場合に返されます。