トークン発行者のエンドポイント - Amazon Cognito

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

トークン発行者のエンドポイント

の OAuth 2.0 トークンエンドポイントは、JSONウェブトークン (JWTs) /oauth2/tokenを発行します。これらのトークンは、ユーザープールによる認証の最終結果です。これには、ユーザー (ID トークン)、ユーザーのアクセスレベル (アクセストークン)、サインインセッションを維持するユーザーの権限 (トークンの更新) に関する情報が含まれます。OpenID Connect (OIDC) の依存パーティライブラリは、このエンドポイントへのリクエストとレスポンスペイロードを処理します。トークンは、検証可能な認証証明、プロファイル情報、バックエンドシステムへのアクセスメカニズムを提供します。

ユーザープール OAuth 2.0 認証サーバーは、トークンエンドポイントから次のタイプのセッションにJSONウェブトークン (JWTs) を発行します。

  1. 認可コード付与のリクエストを完了したユーザー。コードの引き換えに成功すると、ID、アクセス、更新の各トークンが返されます。

  2. クライアント認証情報の付与を完了した M achine-to-machine (M2M) セッション。クライアントシークレットによる認可が成功すると、アクセストークンが返されます。

  3. 以前にサインインし、更新トークンを受け取ったユーザー。更新トークン認証は、新しい ID トークンとアクセストークンを返します。

    注記

    ホストされた UI で、またはフェデレーションを介して認証コード許可でサインインするユーザーは、トークンエンドポイントからトークンを常に更新できます。API オペレーションでサインインInitiateAuthし、記憶されたデバイスがユーザープールでアクティブでないときにトークンエンドポイントでトークンを更新AdminInitiateAuthできるユーザー。記憶されたデバイスがアクティブな場合は、 InitiateAuthまたは AdminInitiateAuthAPIリクエストAuthFlowREFRESH_TOKEN_AUTHの を使用してトークンを更新します。

ユーザープールにドメインを追加すると、トークンエンドポイントが公開されます。HTTP POST リクエストを受け入れます。アプリケーションセキュリティについては、認証コードサインインイベントPKCEで を使用します。PKCE は、認証コードを渡すユーザーが認証したユーザーと同じであることを確認します。の詳細についてはPKCE、IETF「7636RFC」を参照してください。

ユーザープールアプリケーションクライアントとその許可タイプ、クライアントシークレット、承認されたスコープ、クライアントの詳細については、IDs「」を参照してくださいアプリケーションクライアントでのアプリケーション固有の設定。M2M 認証、クライアント認証情報の付与、アクセストークンスコープを使用した認証の詳細については、「」を参照してくださいスコープ、M2M 、および APIsリソースサーバー

アクセストークンからユーザーに関する情報を取得するには、 userInfo エンドポイントまたは に渡します。 GetUser API リクエスト。

POST /oauth2/token

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

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

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

Authorization

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

認証ヘッダー文字列は基本 です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_coderefresh_token、または client_credentials を指定する必要があります。以下の条件下で、トークンエンドポイントからカスタムスコープのアクセストークンをリクエストできます。

  • アプリケーションクライアント設定でリクエストされたスコープを有効にしました。

  • クライアントシークレットを使用してアプリケーションクライアントを設定しました。

  • アプリケーションクライアントでクライアント認証情報の付与を有効にします。

client_id

(オプション) ユーザープール内のアプリケーションクライアントの ID。ユーザーを認証したのと同じアプリケーションクライアントを指定します。

クライアントがパブリックで、シークレットがない場合、または がclient_secretclient_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 }
注記

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

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

例 – 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_secretclient_idと を含むが、その client_idと を持つそのようなクライアントがない場合ですclient_secret

invalid_grant

更新トークンが失効しています。

認可コードが既に消費されているか、存在しません。

アプリクライアントにはリクエストされたスコープ内すべての属性への読み取りアクセス権はありません。例えば、アプリが email スコープをリクエストすると、アプリクライアントは email 属性の読み取りはできますが、email_verified は読み取れません。

unauthorized_client

クライアントがコード付与フローまたはトークンの更新を許可されていません。

unsupported_grant_type

grant_typeauthorization_coderefresh_token、または client_credentials 以外の場合に返されます。