使用 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", }
- 密钥 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.0authorize
端点的请求中。添加参数时,nonce
声明包含在 Amazon Cognito 颁发的 ID 令牌中,您可以使用它来防范重播攻击。如果在您的请求中未提供nonce
值,当您通过第三方身份提供商进行身份验证时,Amazon Cognito 会自动生成并验证随机数,然后将其作为nonce
声明添加到 ID 令牌中。Amazon Cognito 中的nonce
声明的实现基于 OIDC 标准。 - 来源 JTI (
origin_jti
) -
当来源发生身份验证时,系统所产生的原始 JWT 标识符。
- JTI (
jti
) -
jti
声明是 JWT 的唯一标识符。
ID 令牌可包含 OIDC 标准声明
用户池自定义属性始终以 custom: 为前缀。
ID 令牌签名
ID 令牌的签名根据 JWT 令牌的标头和负载计算。在 Web API 中,当您在应用程序外部使用时,您必须始终先验证此签名,然后才能接受该令牌。请参见“验证 JSON Web 令牌”。验证 JSON Web 令牌。