使用 ID 權杖 - Amazon Cognito

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

使用 ID 權杖

ID 權杖是 JSON Web 權杖 (JWT),它包含已驗證使用者身分的相關宣告,例如 nameemailphone_number。您可以在應用程式內部使用此身分資訊。ID 權杖也可以用來向資源伺服器或伺服器應用程式驗證使用者的身分。您還可以透過 Web API 操作,在應用程式外使用 ID 權杖。在那些情況下,您必須先驗證 ID 權杖的簽章,才能信任 ID 權杖中的任何宣告。請參閱驗證 JSON Web 權杖

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

重要

當您的使用者以託管 UI 或聯合身分提供者 (IdP) 登入時,Amazon Cognito 會設定有效期為 1 小時的工作階段 Cookie。如果您使用託管 UI 或聯合,並且為存取和 ID 權杖指定少於 1 小時的最短持續時間,則您的使用者仍將有一個有效的工作階段,直到 Cookie 到期為止。如果使用者的權杖會在一小時的工作階段內過期,則使用者可以重新整理其權杖,無需重新驗證身分。

ID 權杖標頭

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

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

金鑰 ID。它的值指出用於保護權杖之 JSON Web Signature (JWS) 的金鑰。您可以在 jwks_uri 端點檢視您的使用者集區簽署金鑰 ID。

如需 kid 參數的詳細資訊,請參閱金鑰識別符 (kid) 標頭參數

alg

Amazon Cognito 用來保護存取權杖安全的加密演算法。使用者集區是使用 RS256 演算法,即採用 SHA-256 的 RSA 簽章。

如需 alg 參數的詳細資訊,請參閱演算法 (alg) 標頭參數

ID 令牌默認有效載荷

這是來自 ID 令牌的示例有效載荷。它包含有關已驗證使用者的宣告。有關 OpenID Connect(OIDC)標準聲明的更多信息,請參閱 OID C 標準聲明列表。您可以添加您自己設計的聲明與產生權杖前 Lambda 觸發程序.

<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

發行權杖的身分提供者。宣告的格式如下。

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 標準

origin_jti

與使用者的重新整理權杖相關的權杖撤銷識別符。Amazon Cognito 在檢查您是否使用撤銷端點RevokeTokenAPI 作業撤銷使用者權杖時,會參考origin_jti宣告。在撤銷權杖時,Amazon Cognito 會使所有具相同 origin_jti 值的存取權和 ID 權杖無效。

cognito:roles

與使用者群組相關聯之 IAM 角色的名稱陣列。每個使用者集區群組都可以有一個與其關聯的 IAM 角色。此陣列代表使用者群組的所有 IAM 角色,無論優先順序為何。如需詳細資訊,請參閱 新增群組至使用者集區

aud

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

identities

使用者的 identities 屬性內容。此屬性包含您藉由聯合登入或將聯合身分使用者連結至本機設定檔,連結至使用者的每一個第三方身分提供者設定檔的相關資訊。此資訊包含其提供者名稱、提供者唯一 ID 和其他中繼資料。

token_use

權杖的用途。在 ID 權杖中,其值為 id

auth_time

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

exp

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

iat

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

jti

JWT 的唯一識別碼。

ID 權杖可包含 OIDC 標準宣告所定義的 OIDC 標準宣告。這個 ID 權杖也可以包含您在使用者集區中所定義的自訂屬性。Amazon Cognito 將自訂屬性值做為字串寫入 ID 權杖,無論屬性類型為何。

注意

使用者集區自訂屬性一律為前置詞。custom:

ID 權杖簽章

ID 權杖的簽章是根據 JWT 權杖的標頭和酬載計算出來的。在您接受應用程式收到的任何 ID 權杖中的宣告之前,請先驗證權杖的簽章。如需詳細資訊,請參閱「驗證 JSON Web 權杖」。驗證 JSON Web 權杖