ID トークンの理解
ID トークンとは、name
、email
、および phone_number
など、認証されたユーザーのアイデンティティに関するクレームが含まれる、 JSON ウェブトークン (JWT)
ID トークンの有効期限は、5 分から 1 日までの任意の値に設定できます。この値は、アプリケーションのクライアントごとに設定できます。
重要
ユーザーがホストされた UI またはフェデレーション ID プロバイダー (IdP) でサインインすると、Amazon Cognito は 1 時間有効なセッション Cookie を設定します。ホストされた UI またはフェデレーションを使用し、アクセストークンと ID トークンに 1 時間未満の最小期間を指定すると、Cookie の有効期限が切れるまで、ユーザーは有効なセッションを継続できます。1 時間のセッション中に有効期限が切れるトークンがある場合、ユーザーは再認証しなくてもトークンを更新できます。
ID トークンのヘッダー
ヘッダーには 2 つの情報 (キー ID: kid
、アルゴリズム: alg
) が含まれています。
{ "kid" : "1234example=", "alg" : "RS256" }
kid
-
キー ID。その値は、トークンの JSON Web 署名 (JWS) をセキュア化するために使用されたキーを示します。ユーザープール署名キー ID は
jwks_uri
エンドポイントで確認できます。kid
パラメータの詳細については、「Key identifier (kid) header parameter」を参照してください。 alg
-
Amazon Cognito が、アクセストークンをセキュア化するために使用した暗号化アルゴリズム。ユーザープールは、SHA-256 による RSA 署名である RS256 暗号化アルゴリズムを使用します。
alg
パラメータの詳細については、「Algorithm (alg) header parameter」を参照してください。
ID トークンのデフォルトペイロード
これは ID トークンのサンプルペイロードです。認証されたユーザーに関するクレームが含まれています。OpenID Connect (OIDC) 標準クレームに関する詳細については、「OIDC standard claims
<header>
.{ "sub": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee", "cognito:groups": [ "test-group-a", "test-group-b", "test-group-c" ], "email_verified": true, "cognito:preferred_role": "arn:aws:iam::111122223333:role/my-test-role", "iss": "https://cognito-idp.us-west-2.amazonaws.com/us-west-2_example", "cognito:username": "my-test-user", "middle_name": "Jane", "nonce": "abcdefg", "origin_jti": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee", "cognito:roles": [ "arn:aws:iam::111122223333:role/my-test-role" ], "aud": "xxxxxxxxxxxxexample", "identities": [ { "userId": "amzn1.account.EXAMPLE", "providerName": "LoginWithAmazon", "providerType": "LoginWithAmazon", "issuer": null, "primary": "true", "dateCreated": "1642699117273" } ], "event_id": "64f513be-32db-42b0-b78e-b02127b4f463", "token_use": "id", "auth_time": 1676312777, "exp": 1676316377, "iat": 1676312777, "jti": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee", "email": "my-test-user@example.com" } .<token signature>
sub
-
認証されたユーザーの固有識別子 (UUID) またはサブジェクト。ユーザー名はユーザープール内で一意ではない可能性があります。
sub
クレームは、特定のユーザーを識別する最良の方法です。 cognito:groups
-
ユーザーをメンバーとするユーザープールグループの名前の配列。グループは、アプリに提示する識別子として使用したり、アイデンティティプールへの優先 IAM ロールのリクエストの生成に使用したりできます。
cognito:preferred_role
-
ユーザーの最も優先度の高いユーザープールグループに関連付けた IAM ロールの ARN。ユーザープールがこのロールクレームを選択する方法の詳細については、「グループへの優先順位の値の割り当て」を参照してください。
iss
-
トークンを発行した ID プロバイダー。クレームは以下のような形式になります。
https://cognito-idp.
<Region>
.amazonaws.com/<your user pool ID>
cognito:username
-
ユーザープール内のユーザーのユーザー名。
nonce
-
nonce
クレームは、OAuth 2.0 のauthorize
エンドポイントへのリクエストに追加するものと、名前が同じパラメータから取得されます。パラメータを追加すると、Amazon Cognito が発行する ID トークンにnonce
クレームが含められます。これは、リプレイ攻撃からの保護のために使用できます。リクエストでnonce
値を指定せずにサードパーティー ID プロバイダーを介した認証を行う場合、Amazon Cognito はノンスを自動的に生成および検証した上で、その値をnonce
クレームとして ID トークンに追加します。Amazon Cognito でのnonce
クレームの実装は、OIDC 標準に基づいています。 origin_jti
-
ユーザーの更新トークンに関連付けられたトークン失効識別子。Amazon Cognito は、エンドポイントの取り消し または RevokeToken API オペレーションを使用してユーザーのトークンが取り消されたかどうかを確認するときに、
origin_jti
クレームを参照します。トークンを取り消すと、Amazon Cognito は同じorigin_jti
値を持つすべてのアクセストークンと ID トークンを無効にします。 cognito:roles
-
ユーザーのグループに関連付けられた IAM ロールの名前の配列。各ユーザープールグループには、1 つの IAM ロールを関連付けることができます。この配列は、優先順位に関係なく、ユーザーグループのすべての IAM ロールを表します。詳細については、「ユーザープールにグループを追加する」を参照してください。
aud
-
ユーザーを認証したユーザープールアプリクライアント。Amazon Cognito は、アクセストークン
client_id
クレームで同じ値をレンダリングします。 identities
-
ユーザーの
identities
属性の内容。この属性には、フェデレーションサインインによって、またはフェデレーションユーザーをローカルプロファイルにリンクすることによってユーザーにリンクした各サードパーティ ID プロバイダープロファイルに関する情報が含まれます。この情報には、プロバイダー名、プロバイダーの固有 ID、およびその他のメタデータが含まれます。 token_use
-
トークンの本来の目的。ID トークンでは、その値は
id
です。 auth_time
-
ユーザーが認証を完了した認証時刻 (Unix の時間形式)。
exp
-
ユーザーのトークンの有効期限が切れる有効期限 (Unix の時間形式)。
iat
-
Amazon Cognito がユーザーのトークンを発行した発行時刻 (Unix の時間形式)。
jti
-
JWT の一意の識別子。
この ID トークンには、「OIDC standard claims
注記
ユーザープールのカスタム属性には、常にプレフィックスとして custom:
が付けられています。
ID トークンの署名
ID トークンの署名は、JWT トークンのヘッダーとペイロードに基づいて計算されます。アプリが受け取る ID トークンのクレームを受け入れる前に、トークンの署名を検証してください。詳細については、「JSON Web トークンの検証」を参照してください。JSON Web トークンの検証。