了解身份 (ID) 令牌 - Amazon Cognito

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

了解身份 (ID) 令牌

ID 令牌是一个 JSONWeb 令牌 (JWT),其中包含有关经过身份验证的用户身份的声明,例如nameemail、和phone_number。您可以在应用程序中使用此身份信息。此外,ID 令牌还可用于针对资源服务器或服务器应用程序对用户进行身份验证。您还可以在应用程序之外使用 ID 令牌进行 Web API 操作。在这些情况下,您必须先验证 ID 令牌的签名,然后才能信任 ID 令牌内的任何声明。请参阅 验证JSON网络令牌

您可以将 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 签名 (JWS) 的密钥。您可以在jwks_uri终端节点上查看您的用户池签IDs名密钥。

有关 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

您与用户优先级最高的用户池ARN组关联的IAM角色。有关您的用户群体如何选择此角色声明的更多信息,请参阅将优先级值分配到组

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 中的实施是基于OIDC标准的。

origin_jti

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