了解身份(ID)令牌
ID 令牌是一个 JSON Web 令牌(JWT)name
、email
和 phone_number
。您可以在应用程序中使用此身份信息。此外,ID 令牌还可用于针对资源服务器或服务器应用程序对用户进行身份验证。您还可以将应用程序外部的 ID 令牌用于 Web API 操作。在这些情况下,您必须先验证 ID 令牌的签名,然后才能信任 ID 令牌内的任何声明。请参阅 验证 JSON Web 令牌。
您可以将 ID 令牌过期时间设置为 5 分钟到 1 天之间的任何值。您可以按应用程序客户端设置此值。
重要
当您的用户使用托管 UI 或联合身份提供商 (IdP, Identity Provider) 登录时,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)标准声明的更多信息,请参阅 OIDC 标准声明
<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.0authorize
端点的请求中。添加参数时,nonce
声明包含在 Amazon Cognito 颁发的 ID 令牌中,您可以使用它来防范重播攻击。如果在您的请求中未提供nonce
值,当您通过第三方身份提供商进行身份验证时,Amazon Cognito 会自动生成并验证随机数,然后将其作为nonce
声明添加到 ID 令牌中。Amazon Cognito 中的nonce
声明的实现基于 OIDC 标准。 origin_jti
-
与用户的刷新令牌关联的令牌撤消标识符。Amazon Cognito 在检查您是否通过 撤消端点 或 RevokeToken API 操作撤消了用户的令牌时引用了
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 标准声明
注意
用户池自定义属性始终以 custom:
为前缀。
ID 令牌签名
ID 令牌的签名根据 JWT 令牌的标头和负载计算。在您接受应用程序收到的任何 ID 令牌中的声明之前,请验证该令牌的签名。有关更多信息,请参阅“验证 JSON Web 令牌”。验证 JSON Web 令牌。