使用 ID 令牌 - Amazon Cognito
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 ID 令牌

ID 令牌是一个 JSON Web 令牌(JWT),其中包含有关经身份验证的用户的身份声明,如 nameemailphone_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 标准声明列表。您可以使用添加对自己设计的声明令牌生成前 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 令牌中。Amazon Cognito 中的 nonce 声明的实现基于 OIDC 标准

origin_jti

与用户的刷新令牌关联的令牌撤消标识符。Amazon Cognito 在检查您是否通过撤消端点或 API 操作撤销了用户的令牌时会引用该origin_jti声明。RevokeToken当您撤消令牌时,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 令牌