

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 了解身分 (ID) 字符
<a name="amazon-cognito-user-pools-using-the-id-token"></a>

ID 權杖是 [JSON Web 權杖 (JWT)](https://tools.ietf.org/html/rfc7519)，它包含已驗證使用者身分的相關宣告，例如 `name`、`email` 和 `phone_number`。您可以在應用程式內部使用此身分資訊。ID 權杖也可以用來向資源伺服器或伺服器應用程式驗證使用者的身分。您還可以透過 Web API 操作，在應用程式外使用 ID 權杖。在那些情況下，您必須先驗證 ID 權杖的簽章，才能信任 ID 權杖中的任何宣告。請參閱 [驗證 JSON Web 字符](amazon-cognito-user-pools-using-tokens-verifying-a-jwt.md)。

您可以將 ID 權杖過期設為 5 分鐘到 1 天的值。此值可根據應用程式用戶端設定。

**重要**  
當您的使用者使用受管登入登入時，Amazon Cognito 會設定 1 小時內有效的工作階段 Cookie。如果您在應用程式中使用受管登入進行身分驗證，並為您的存取和 ID 字符指定少於 1 小時的最短持續時間，您的使用者仍會擁有有效的工作階段，直到 Cookie 過期為止。如果使用者的權杖會在一小時的工作階段內過期，則使用者可以重新整理其權杖，無需重新驗證身分。

## ID 權杖標頭
<a name="user-pool-id-token-header"></a>

標頭包含兩項資訊：金鑰 ID (`kid`) 和演算法 (`alg`)。

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

**`kid`**  
金鑰 ID。它的值指出用於保護權杖之 JSON Web Signature (JWS) 的金鑰。您可以在 `jwks_uri` 端點檢視您的使用者集區簽署金鑰 ID。  
如需 `kid` 參數的詳細資訊，請參閱[金鑰識別符 (kid) 標頭參數](https://tools.ietf.org/html/draft-ietf-jose-json-web-key-41#section-4.5)。

**`alg`**  
Amazon Cognito 用來保護存取權杖安全的加密演算法。使用者集區是使用 RS256 演算法，即採用 SHA-256 的 RSA 簽章。  
如需 `alg` 參數的詳細資訊，請參閱[演算法 (alg) 標頭參數](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 標準宣告](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`**  
發行權杖的身分提供者。宣告的格式如下。  
`https://cognito-idp.<Region>.amazonaws.com/<your user pool ID>`

**`cognito:username`**  
您的使用者在您的使用者集區中的使用者名稱。

**`nonce`**  
`nonce` 宣告來自同名的參數，您可以在對 OAuth 2.0 `authorize` 端點的請求中新增此參數。新增參數時，`nonce` 宣告會包含在 Amazon Cognito 發出的 ID 權杖中，您可以使用它來防止重新執行攻擊。如果您未提供 `nonce` 值，Amazon Cognito 會在您透過第三方身分提供者進行身分驗證時自動產生並驗證 Nonce，然後將其新增為 ID 權杖中的 `nonce` 宣告。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 角色的名稱陣列。每個使用者集區群組都可以有一個與其關聯的 IAM 角色。此陣列代表使用者群組的所有 IAM 角色，無論優先順序為何。如需詳細資訊，請參閱[新增群組至使用者集區](cognito-user-pools-user-groups.md)。

**`aud`**  
對您的使用者進行身分驗證的使用者集區應用程式用戶端。Amazon Cognito 會在存取權杖 `client_id` 宣告中呈現相同的值。

**`identities`**  
使用者的 `identities` 屬性內容。此屬性包含您藉由聯合登入或[將聯合身分使用者連結至本機設定檔](cognito-user-pools-identity-federation-consolidate-users.md)，連結至使用者的每一個第三方身分提供者設定檔的相關資訊。此資訊包含其提供者名稱、提供者唯一 ID 和其他中繼資料。

**`token_use`**  
權杖的用途。在 ID 權杖中，其值為 `id`。

**`auth_time`**  
您的使用者完成身分驗證的身分驗證時間 (以 Unix 時間格式表示)。

**`exp`**  
使用者權杖到期的到期時間 (以 Unix 時間格式表示)。

**`iat`**  
Amazon Cognito 發行您使用者權杖的時間 (採用 Unix 時間格式)。

**`jti`**  
JWT 的唯一識別碼。

ID 權杖可包含 [OIDC 標準宣告](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 Web 字符](amazon-cognito-user-pools-using-tokens-verifying-a-jwt.md)。