ID トークンの使用 - Amazon Cognito

ID トークンの使用

ID トークンとは、nameemail、および phone_number など、認証されたユーザーのアイデンティティに関するクレームが含まれる、 JSON ウェブトークン (JWT) です。この ID 情報はアプリケーション内で使用できます。ID トークンは、リソースサーバーまたはサーバーアプリケーションに対するユーザーの認証にも使用できます。Web API オペレーションを使用して、アプリケーション外で ID トークンを使用することも可能です。このような場合は、ID トークン内のクレームを信頼する前に、ID トークンの署名を検証する必要があります。「JSON web トークンの検証」を参照してください。

ID トークンの有効期限は、5 分から 1 日までの任意の値に設定できます。この値は、アプリケーションのクライアントごとに設定できます。

重要

ユーザーがホストされた UI またはフェデレーション ID プロバイダー (IdP) でサインインすると、Amazon Cognito は 1 時間有効なセッション Cookie を設定します。ホストされた UI またはフェデレーションを使用し、アクセストークンと ID トークンに 1 時間未満の最小期間を指定すると、Cookie の有効期限が切れるまで、ユーザーは有効なセッションを継続できます。1 時間のセッション中に有効期限が切れるトークンがある場合、ユーザーは再認証しなくてもトークンを更新できます。

ID トークンのヘッダー

ヘッダーには 2 つの情報 (キー ID: kid、アルゴリズム: alg) が含まれています。

{ "kid" : "1234example=" "alg" : "RS256", }
Key ID (kid)

kid パラメータは、トークンの JSON Web 署名 (JWS) をセキュア化するために使用されたキーを示すヒントです。

kid パラメータの詳細については、「Key identifier (kid) header parameter」を参照してください。

Algorithm (alg)

alg パラメータは、ID トークンをセキュア化するために使用される暗号化アルゴリズムを表します。ユーザープールは、SHA-256 による RSA 署名である RS256 暗号化アルゴリズムを使用します。

alg パラメータの詳細については、「Algorithm (alg) header parameter」を参照してください。

ID トークンのペイロード

これは ID トークンのサンプルペイロードで、認証されたユーザーに関するクレームが含まれています。OpenID Connect (OIDC) 標準クレームに関する詳細については、「OIDC standard claims」を参照してください。

{ "sub": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee", "aud": "xxxxxxxxxxxxexample", "email_verified": true, "token_use": "id", "auth_time": 1500009400, "iss": "https://cognito-idp.us-east-1.amazonaws.com/us-east-1_example", "cognito:username": "janedoe", "exp": 1500013000, "given_name": "Jane", "iat": 1500009400, "email": "janedoe@example.com", "jti": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee", "origin_jti": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee" }
Subject (sub)

sub クレームは、認証されたユーザーの固有識別子 (UUID) です。これは、一意ではない場合があるユーザー名とは、同一のものではありません。

Issuer (iss)

iss クレームの形式は次のとおりです。

https://cognito-idp.{region}.amazonaws.com/{userPoolId}

例えば、us-east-1 リージョンでユーザープールを作成し、そのユーザープール ID が u123456 であるとします。この場合、ユーザープールのユーザーに対して発行される ID トークンには、以下の iss クレーム値があります。

https://cognito-idp.us-east-1.amazonaws.com/u123456
Audience (aud)

aud クレームの内容は、ユーザーがユーザープールで認証したときにリクエストした client_id です

Token use (token_use)

The token_use クレームは、このトークンの用途を表します。その値は ID トークンの場合は、常に id となります。

Authentication time (auth_time)

auth_time クレームには、認証された時刻が含まれます。その値は、UTC 形式で測定された 1970-01-01T0:0:0Z からの秒数を表す JSON number です。更新の際の auth_time は、トークンが発行された時刻ではなく、当初の認証が行われた時刻を表します。

ノンス (nonce)

nonce クレームは、OAuth 2.0 の authorize エンドポイントへのリクエストに追加するものと、名前が同じパラメータから取得されます。パラメータを追加すると、Amazon Cognito が発行する ID トークンに nonce クレームが含められます。これは、リプレイ攻撃からの保護のために使用できます。リクエストで nonce 値を指定せずにサードパーティー ID プロバイダーを介した認証を行う場合、Amazon Cognito はノンスを自動的に生成および検証した上で、その値を nonce クレームとして ID トークンに追加します。Amazon Cognito での nonce クレームの実装は、OIDC 標準に基づいています。

Origin jti (origin_jti)

当初の認証が行われた時点からの、送信元の JWT 識別子です。

jti (jti)

jti クレームは、JWT の固有識別子です。

この ID トークンには、「OIDC standard claims」に定義されている、OIDC の標準クレームを含めることができます。また、ユーザープールで定義されたカスタム属性が、この ID トークンに含まれる場合もあります。Amazon Cognito は、属性タイプに関係なく、カスタム属性値を文字列として ID トークンに書き込みます。

注記

ユーザープールのカスタム属性には、常に custom: プレフィックスが先頭に付けられています。

ID トークンの署名

ID トークンの署名は、JWT トークンのヘッダーとペイロードに基づいて計算されます。Web API のアプリケーション外で使用するときは、常にこの署名を検証してからトークンを受け入れる必要があります。「JSON ウェブトークン JSON web トークンの検証 の検証」を参照してください。