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

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

使用 ID 令牌

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

您可以将 ID 令牌过期时间设置为 5 分钟到 1 天之间的任何值。可以根据应用程序客户端设置此值。

重要

对于访问和 ID 令牌,请勿指定最少少于一小时。Amazon Cognito HosteDUi 使用有效期为一小时的 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 令牌的示例负载。它包含有关经过身份验证的用户的声明。有关 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-01T 0:0:0 Z 开始以 UTC 格式为单位。在刷新时,它代表原始身份验证发生的时间,而不是发布令牌的时间。

源 JTI (origin_jti

这些区域有:源 JWT 标识符,来自当original发生身份验证。

JTI (jti

这些区域有:jti声明是 JWT 的唯一标识符。

ID 令牌可包含在OIDC 标准索赔。它还可包含您在用户池中定义的自定义属性。

注意

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

ID 令牌签名

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