

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

# ID トークンの理解
<a name="amazon-cognito-user-pools-using-the-id-token"></a>

ID トークンとは、`name`、`email`、および `phone_number` など、認証されたユーザーのアイデンティティに関するクレームが含まれる、[ JSON ウェブトークン (JWT)](https://tools.ietf.org/html/rfc7519) です。この ID 情報はアプリケーション内で使用できます。ID トークンは、リソースサーバーまたはサーバーアプリケーションに対するユーザーの認証にも使用できます。Web API オペレーションを使用して、アプリケーション外で ID トークンを使用することも可能です。このような場合は、ID トークン内のクレームを信頼する前に、ID トークンの署名を検証する必要があります。「[JSON ウェブトークンの検証](amazon-cognito-user-pools-using-tokens-verifying-a-jwt.md)」を参照してください。

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

**重要**  
ユーザーがマネージドログインでサインインすると、Amazon Cognito は 1 時間有効なセッション Cookie を設定します。アプリケーションでマネージドログインを使用して認証し、アクセストークンと ID トークンに 1 時間未満の最小期間を指定すると、ユーザーは Cookie の有効期限が切れるまで有効なセッションを維持できます。1 時間のセッション中に有効期限が切れるトークンがある場合、ユーザーは再認証しなくてもトークンを更新できます。

## ID トークンのヘッダー
<a name="user-pool-id-token-header"></a>

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

```
{
"kid" : "1234example=",
"alg" : "RS256"
}
```

**`kid`**  
キー ID。その値は、トークンの JSON Web 署名 (JWS) をセキュア化するために使用されたキーを示します。ユーザープール署名キー ID は `jwks_uri` エンドポイントで確認できます。  
`kid` パラメータの詳細については、「[Key identifier (kid) header parameter](https://tools.ietf.org/html/draft-ietf-jose-json-web-key-41#section-4.5)」を参照してください。

**`alg`**  
Amazon Cognito が、アクセストークンをセキュア化するために使用した暗号化アルゴリズム。ユーザープールは、SHA-256 による RSA 署名である RS256 暗号化アルゴリズムを使用します。  
`alg` パラメータの詳細については、「[Algorithm (alg) header parameter](https://tools.ietf.org/html/draft-ietf-jose-json-web-key-41#section-4.4)」を参照してください。

## ID トークンのデフォルトペイロード
<a name="user-pool-id-token-payload"></a>

これは ID トークンのサンプルペイロードです。認証されたユーザーに関するクレームが含まれています。OpenID Connect (OIDC) 標準クレームに関する詳細については、「[OIDC standard claims](http://openid.net/specs/openid-connect-core-1_0.html#StandardClaims)」を参照してください。[トークン生成前の Lambda トリガー](user-pool-lambda-pre-token-generation.md) を使用して独自の設計のクレームを追加できます。

```
<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](cognito-terms.md#terms-uuid)) またはサブジェクト。ユーザー名はユーザープール内で一意ではない可能性があります。`sub` クレームは、特定のユーザーを識別する最良の方法です。

**`cognito:groups`**  
ユーザーをメンバーとするユーザープールグループの名前の配列。グループは、アプリに提示する識別子として使用したり、アイデンティティプールへの優先 IAM ロールのリクエストの生成に使用したりできます。

**`cognito:preferred_role`**  
ユーザーの最も優先度の高いユーザープールグループに関連付けた IAM ロールの ARN。ユーザープールがこのロールクレームを選択する方法の詳細については、「[グループへの優先順位の値の割り当て](cognito-user-pools-user-groups.md#assigning-precedence-values-to-groups)」を参照してください。

**`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 標準](https://openid.net/specs/openid-connect-core-1_0.html#IDTokenValidation)に基づいています。

**`origin_jti`**  
ユーザーの更新トークンに関連付けられたトークン失効識別子。Amazon Cognito は、[エンドポイントの取り消し](revocation-endpoint.md) または [RevokeToken](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RevokeToken.html) API オペレーションを使用してユーザーのトークンが取り消されたかどうかを確認するときに、`origin_jti` クレームを参照します。トークンを取り消すと、Amazon Cognito は同じ `origin_jti` 値を持つすべてのアクセストークンと ID トークンを無効にします。

**`cognito:roles`**  
ユーザーのグループに関連付けられた IAM ロールの名前の配列。各ユーザープールグループには、1 つの IAM ロールを関連付けることができます。この配列は、優先順位に関係なく、ユーザーグループのすべての IAM ロールを表します。詳細については、「[ユーザープールにグループを追加する](cognito-user-pools-user-groups.md)」を参照してください。

**`aud`**  
ユーザーを認証したユーザープールアプリクライアント。Amazon Cognito は、アクセストークン `client_id` クレームで同じ値をレンダリングします。

**`identities`**  
ユーザーの `identities` 属性の内容。この属性には、フェデレーションサインインによって、または[フェデレーションユーザーをローカルプロファイルにリンクする](cognito-user-pools-identity-federation-consolidate-users.md)ことによってユーザーにリンクした各サードパーティ ID プロバイダープロファイルに関する情報が含まれます。この情報には、プロバイダー名、プロバイダーの固有 ID、およびその他のメタデータが含まれます。

**`token_use`**  
トークンの本来の目的。ID トークンでは、その値は `id` です。

**`auth_time`**  
ユーザーが認証を完了した認証時刻 (Unix の時間形式)。

**`exp`**  
ユーザーのトークンの有効期限が切れる有効期限 (Unix の時間形式)。

**`iat`**  
Amazon Cognito がユーザーのトークンを発行した発行時刻 (Unix の時間形式)。

**`jti`**  
JWT の一意の識別子。

この ID トークンには、「[OIDC standard claims](https://openid.net/specs/openid-connect-core-1_0.html#Claims)」に定義されている、OIDC の標準クレームを含めることができます。また、ユーザープールで定義されたカスタム属性が、この ID トークンに含まれる場合もあります。Amazon Cognito は、属性タイプに関係なく、カスタム属性値を文字列として ID トークンに書き込みます。

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

## ID トークンの署名
<a name="user-pool-id-token-signature"></a>

ID トークンの署名は、JWT トークンのヘッダーとペイロードに基づいて計算されます。アプリが受け取る ID トークンのクレームを受け入れる前に、トークンの署名を検証してください。詳細については、「JSON Web トークンの検証」を参照してください。[JSON ウェブトークンの検証](amazon-cognito-user-pools-using-tokens-verifying-a-jwt.md)。