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

使用访问令牌

用户池访问令牌包含有关经身份验证的用户声明、用户组列表以及范围列表。访问令牌的主要用途是在用户池中用户的环境中授予 API 操作权限。例如,您可以使用访问令牌授予用户访问权限以添加、更改或删除用户属性。

访问令牌以 JSON Web Token(JWT)表示。访问令牌的标头与 ID 令牌具有相同的结构。但是,密钥 ID(kid)不同,因为用于签署 ID 令牌和访问令牌的密钥不同。与 ID 令牌一样,您必须先在 Web API 中验证访问令牌的签名,然后才能信任它的任何声明。请参阅 验证 JSON Web 令牌。您可以将访问令牌过期时间设置为 5 分钟到 1 天之间的任何值。您可以根据应用程序客户端设置此值。

重要

对于访问和 ID 令牌,请勿将最小值指定少于一小时。Amazon Cognito HostedUI 使用有效期为一小时的 Cookie。如果您输入的最短时间不到一个小时,则无法获得较短的过期时间。

访问令牌标头

标头包含两部分信息:密钥 ID (kid) 和算法 (alg)。

{ "kid" : "1234example=" "alg" : "RS256", }
密钥 ID(kid

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

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

算法(alg

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

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

访问令牌有效负载

这是来自访问令牌的示例负载。有关更多信息,请参阅 JWT 声明

{ "sub": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee", "device_key": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee", "cognito:groups": [ "admin" ], "token_use": "access", "scope": "aws.cognito.signin.user.admin", "auth_time": 1562190524, "iss": "https://cognito-idp.us-west-2.amazonaws.com/us-west-2_example", "exp": 1562194124, "iat": 1562190524, "origin_jti": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee", "jti": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee", "client_id": "57cbishk4j24pabc1234567890", "username": "janedoe@example.com" }
主题(sub

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

Amazon Cognito 组(cognito:groups

cognito:groups声明是用户所属的组列表。

令牌使用(token_use

token_use声明描述了该令牌的预期用途。对于访问令牌,它的值始终为 access

范围(scope

范围声明是 Oauth 2.0 范围的列表,用于定义令牌提供的访问权限。

身份验证时间(auth_time

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

发布者(iss

iss 声明采用以下格式:

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

来源 JTI(origin_jti

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

JTI(jti

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

访问令牌签名

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