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

使用 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", }
密钥 ID(kid

kid 参数是一个提示,指示哪些密钥用于保护令牌的 JSON Web Signature(JWS)。

有关 kid 参数的更多信息,请参阅密钥标识符(kid)标头参数

算法(alg

alg 参数表示用于保护 ID 令牌的加密算法。用户池使用 RS256 加密算法,这是一种采用 SHA-256 的 RSA 签名。

有关 alg 参数的更多信息,请参阅算法(alg)标头参数

ID 令牌负载

这是来自 ID 令牌的示例负载。它包含有关经过身份验证的用户的声明。有关 OpenID Connect(OIDC)标准声明的更多信息,请参阅 OIDC 标准声明

{ "sub": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee", "aud": "xxxxxxxxxxxxexample", "email_verified": true, "token_use": "id", "auth_time": 1500009400, "iss": "https://cognito-idp.us-east-1.amazonaws.com/us-east-1_example", "cognito:username": "janedoe", "exp": 1500013000, "given_name": "Jane", "iat": 1500009400, "email": "janedoe@example.com", "jti": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee", "origin_jti": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee" }
主题(sub

sub 声明是经过身份验证的用户的唯一标识符(UUID)。它不同于用户名,后者可能不是唯一的。

发布者(iss

iss 声明采用以下格式:

https://cognito-idp.{region}.amazonaws.com/{userPoolId}

例如,假设您在us-east-1区域创建了用户池,其用户池 ID 为 u123456。在这种情况下,为用户池的用户颁发的 ID 令牌具有以下 iss 声明价值:

https://cognito-idp.us-east-1.amazonaws.com/u123456
受众(aud

aud 声明的内容是用户在使用您的用户池进行身份验证时请求的 client_id

令牌使用(token_use

The token_use 声明描述了该令牌的预期用途。对于 ID 令牌,它的值始终为 id

身份验证时间(auth_time

auth_time 声明包含身份验证发生的时间。其值是一个 JSON 数字,代表从 1970-01-01T0:0:0Z 开始的秒数,以 UTC 格式为单位。在刷新时,auth_time 代表原始身份验证发生的时间,而不是发布令牌的时间。

随机数(nonce

nonce 声明来自同名的参数,您可以将其添加到 OAuth 2.0 authorize 端点的请求中。添加参数时,nonce 声明包含在 Amazon Cognito 颁发的 ID 令牌中,您可以使用它来防范重播攻击。如果在您的请求中未提供 nonce 值,当您通过第三方身份提供商进行身份验证时,Amazon Cognito 会自动生成并验证随机数,然后将其作为 nonce 声明添加到 ID 令牌中。Amazon Cognito 中的 nonce 声明的实现基于 OIDC 标准

来源 JTI(origin_jti

当来源发生身份验证时,系统所产生的原始 JWT 标识符。

JTI(jti

jti 声明是 JWT 的唯一标识符。

ID 令牌可包含 OIDC 标准声明中所定义的 OIDC 标准声明。ID 令牌还可包含您在用户池中定义的自定义属性。

注意

用户池自定义属性始终以 custom: 为前缀。

ID 令牌签名

ID 令牌的签名根据 JWT 令牌的标头和负载计算。在 Web API 中,当您在应用程序外部使用时,您必须始终先验证此签名,然后才能接受该令牌。请参见验证 JSON Web 令牌。。验证 JSON Web 令牌