

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

# アクセストークンの理解
<a name="amazon-cognito-user-pools-using-the-access-token"></a>

ユーザープールアクセストークンには、認証されたユーザーに関するクレーム、ユーザーのグループのリスト、およびスコープのリストが含まれます。アクセストークンの目的は、API オペレーションを承認することです。ユーザープールは、ユーザーのセルフサービスオペレーションを許可するアクセストークンを受け入れます。例えば、アクセストークンを使用して、ユーザーにユーザー属性を追加、変更、または削除するアクセス権を付与することができます。

ユーザープールに追加したカスタムスコープから派生した [OAuth 2.0 スコープ](https://www.rfc-editor.org/rfc/rfc6749#section-3.3)をアクセストークンに含めると、ユーザーが API から情報を取得することを承認できます。例えば、Amazon API Gateway は、Amazon Cognito のアクセストークンによる認可をサポートします。REST API オーソライザーにユーザープールからの情報を入力することも、Amazon Cognito を HTTP API の JSON ウェブトークン (JWT) オーソライザーとして使用することもできます。カスタムスコープでアクセストークンを生成するには、ユーザープールの[パブリックエンドポイント](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-userpools-server-contract-reference.html)を通じてアクセストークンをリクエストする必要があります。

エッセンシャル[機能プラン](cognito-sign-in-feature-plans.md)またはプラス機能プランでは、トークン生成前の Lambda トリガーを実装することで、ランタイムにアクセストークンにスコープを追加することもできます。詳細については、「[トークン生成前の Lambda トリガー](user-pool-lambda-pre-token-generation.md)」を参照してください。

`openid` スコープを持つユーザーのアクセストークンは、ユーザーの属性に関する詳細情報を [userInfo エンドポイント](userinfo-endpoint.md)にリクエストするためのアクセス許可です。`userInfo` エンドポイントから得られる情報の量は、アクセストークン内のその他のスコープ (すべてのユーザーデータを求める `profile` や E メールアドレスを求める `email` など) によって異なります。

`aws.cognito.signin.user.admin` スコープを持つユーザーのアクセストークンは、ユーザー属性の読み取りと書き込み、認証要素の一覧表示、多要素認証 (MFA) の設定、記憶されたデバイスの管理を行うためのアクセス許可です。アクセストークンによってこのスコープに付与される、属性へのアクセス権のレベルは、アプリケーションクライアントに割り当てた、属性の読み取り/書き込みアクセス許可と一致します。

アクセストークンは、[JSON ウェブトークン (JWT)](https://www.rfc-editor.org/rfc/rfc7519) です。アクセストークンのヘッダーは ID トークンと同じ構造になっていますが、Amazon Cognito は、ID トークンに署名するキーとは異なるキーでアクセストークンに署名します。アクセスキー ID (`kid`) クレームの値は、同じユーザーセッションの ID トークンの `kid` クレームの値と一致しません。アプリコードで、ID トークンとアクセストークンを個別に検証します。署名を検証するまでは、アクセストークンのクレームを信用しないでください。詳細については、「[JSON ウェブトークンの検証](amazon-cognito-user-pools-using-tokens-verifying-a-jwt.md)」を参照してください。アクセストークンの有効期限は、5 分から 1 日までの間で任意の値に設定できます。この値は、アプリケーションのクライアントごとに設定できます。

**重要**  
マネージドログインを使用する場合、アクセストークンと ID トークンの最小の有効期間を 1 時間未満に設定しないでください。マネージドログインは、1 時間有効なブラウザ Cookie を設定します。アクセストークンの有効期間を 1 時間未満に設定しても、マネージドログイン Cookie の有効性には影響がなく、ユーザーは初回サインインから 1 時間にわたって追加の認証情報なしで再認証できます。

## アクセストークンのヘッダー
<a name="user-pool-access-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)」を参照してください。

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

以下は、アクセストークンのサンプルペイロードです。詳細については、「[JWT claims](https://tools.ietf.org/html/rfc7519#section-4)」を参照してください。[トークン生成前の Lambda トリガー](user-pool-lambda-pre-token-generation.md) を使用して独自の設計のクレームを追加できます。

```
<header>.
{
   "sub":"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
   "device_key": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
   "cognito:groups":[
      "testgroup"
   ],
   "iss":"https://cognito-idp.us-west-2.amazonaws.com/us-west-2_example",
   "version":2,
   "client_id":"xxxxxxxxxxxxexample",
   "aud": "https://api.example.com",
   "origin_jti":"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
   "event_id":"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
   "token_use":"access",
   "scope":"phone openid profile resourceserver.1/appclient2 email",
   "auth_time":1676313851,
   "exp":1676317451,
   "iat":1676313851,
   "jti":"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
   "username":"my-test-user"
}
.<token signature>
```

**`sub`**  
認証されたユーザーの固有識別子 ([UUID](cognito-terms.md#terms-uuid)) またはサブジェクト。ユーザー名はユーザープール内で一意ではない可能性があります。`sub` クレームは、特定のユーザーを識別する最良の方法です。

**`cognito:groups`**  
ユーザーをメンバーとするユーザープールグループの名前の配列。

**`iss`**  
トークンを発行した ID プロバイダー。クレームは以下のような形式になります。  
`https://cognito-idp.us-east-1.amazonaws.com/us-east-1_EXAMPLE`

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

**aud**  
アクセストークンが認可する API の URL。アプリケーションが[リソースバインディング](cognito-user-pools-define-resource-servers.md#cognito-user-pools-resource-binding)を認可サーバーにリクエストした場合にのみ使用されます。

**`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 トークンを検証しなくなります。

**`token_use`**  
トークンの本来の目的。アクセストークンでは、その値は `access` です。

**`scope`**  
サインインしたユーザーに発行された OAuth 2.0 スコープのリスト。スコープは、`userInfo` エンドポイントにある外部 API、ユーザーによるセルフサービスのオペレーション、ユーザーデータに対する、トークンが提供するアクセス権を定義します。[トークンエンドポイント](token-endpoint.md) のトークンには、アプリクライアントがサポートする任意のスコープを含めることができます。Amazon Cognito API サインインからのトークンにはスコープ `aws.cognito.signin.user.admin` のみが含まれます。

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

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

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

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

**`username`**  
ユーザープール内のユーザーのユーザー名。

**その他のリソース**
+ [Amazon Cognito ユーザープールでアクセストークンをカスタマイズする方法](https://aws.amazon.com/blogs/security/how-to-customize-access-tokens-in-amazon-cognito-user-pools/)

## アクセストークンの署名
<a name="user-pool-access-token-signature"></a>

`.well-known/jwks.json` エンドポイントでアドバタイズされたキーで署名されたアクセストークンの署名は、トークンヘッダーとペイロードの整合性を検証します。アクセストークンを使用して外部 API へのアクセスを許可する場合は、この署名を署名元のキーと照合して検証するように API オーソライザーを必ず設定します。詳細については、「[JSON ウェブトークンの検証](amazon-cognito-user-pools-using-tokens-verifying-a-jwt.md)」を参照してください。