本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
了解访问令牌
用户池访问令牌包含有关经身份验证的用户声明、用户组列表以及范围列表。访问令牌的目的是授权执行 API 操作。您的用户群体接受访问令牌以授权用户执行自助操作。例如,您可以使用访问令牌授予用户访问权限以添加、更改或删除用户属性。
通过访问令牌中的 OAuth 2.0 作用
借助 Essentials 或 Plus 功能计划,您还可以实现令牌生成前 Lambda 触发器,在运行时为您的访问令牌添加范围。有关更多信息,请参阅 令牌生成前 Lambda 触发器。
具有openid作用域的用户的访问令牌是可以从中请求有关您的用户属性的更多信息的权限userInfo 端点。来自userInfo端点的信息量来自访问令牌中的其他范围:例如,profile对于所有用户数据,email针对他们的电子邮件地址。
用户的访问令牌的aws.cognito.signin.user.admin范围是读取和写入用户属性、列出身份验证因素、配置多重身份验证 (MFA) 首选项以及管理记住的设备的权限。您的访问令牌授予此范围的属性访问权限级别与您分配给应用程序客户端的属性 read/write 权限相匹配。
访问令牌是 JSON Web 令牌 (JWT)kid) 声明的值与来自同一用户会话的 ID 令牌中 kid 声明的值不匹配。在您的应用程序代码中,单独验证 ID 令牌和访问令牌。在验证签名之前,请勿信任访问令牌中的声明。有关更多信息,请参阅 验证 JSON 网络令牌。您可以将访问令牌过期时间设置为 5 分钟到 1 天之间的任何值。您可以按应用程序客户端设置此值。
重要
对于访问权限和 ID 令牌,如果您使用托管登录,请不要指定至少少于一小时的时间。托管登录会设置有效期为一小时的浏览器 Cookie。如果您将访问令牌的持续时间配置为少于一小时,则这不会影响托管登录 Cookie 的有效性,也不会影响用户在初始登录后一小时内无需其他凭据即可重新进行身份验证的能力。
访问令牌标头
标头包含两部分信息:密钥 ID (kid) 和算法 (alg)。
{ "kid" : "1234example=" "alg" : "RS256", }
- kid
- 
            密钥 ID。其值指示用于保护令牌的 JSON Web Signature (JWS) 的密钥。您可以在 jwks_uri终端节点上查看您的用户池签 IDs 名密钥。有关 kid参数的更多信息,请参阅密钥标识符 (kid) 标头参数。 
- alg
- 
            Amazon Cognito 用于保护访问令牌的加密算法。用户池使用 RS256 加密算法,即带有 SHA-256 的 RSA 签名。 有关 alg参数的更多信息,请参阅算法(alg)标头参数。 
访问令牌默认有效载荷
这是来自访问令牌的示例负载。有关更多信息,请参阅 JWT 声明
<header>. { "sub":"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee", "device_key": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee", "cognito:groups":[ "testgroup" ], "iss":"https://cognito-idp.us-west-2.amazonaws.com/us-west-2_example", "version":2, "client_id":"xxxxxxxxxxxxexample", "aud": "https://api.example.com", "origin_jti":"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee", "event_id":"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee", "token_use":"access", "scope":"phone openid profile resourceserver.1/appclient2 email", "auth_time":1676313851, "exp":1676317451, "iat":1676313851, "jti":"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee", "username":"my-test-user" } .<token signature>
- sub
- 
            经过身份验证的用户的唯一标识符(UUID)或主题。用户名在您的用户群体中可能不是唯一的。 sub声明是识别给定用户的最佳方法。
- cognito:groups
- 
            以您的用户为成员的用户群体组的名称数组。 
- iss
- 
            发行令牌的身份提供者。声明采用以下格式。 https://cognito-idp.us-east-1.amazonaws.com/us-east-1_EXAMPLE
- client_id
- 
            对用户进行身份验证的用户群体应用程序客户端。Amazon Cognito 在 ID 令牌 aud声明中呈现相同的值。
- aud
- 
            访问令牌要授权的 API 的网址。仅当您的应用程序向授权服务器请求资源绑定时才会显示。 
- origin_jti
- 
            与用户的刷新令牌关联的令牌撤消标识符。Amazon Cognito 在检查您是否通过撤消端点或 API 操作撤销了用户的令牌时会引用该 origin_jti声明。RevokeToken当您撤销令牌时,Amazon Cognito 将不再验证具有相同值的访问令牌和身份令牌。origin_jti
- token_use
- 
            令牌的预期用途。在访问令牌中,其值为 access。
- scope
- 
            向登录用户发布的 OAuth 2.0 范围列表。作用域定义令牌为 userInfo端点上的外部 APIs、用户自助服务操作和用户数据提供的访问权限。令牌端点 中的令牌可以包含您的应用程序客户端支持的任何范围。来自 Amazon Cognito API 登录的令牌仅包含范围aws.cognito.signin.user.admin。
- auth_time
- 
            您的用户完成身份验证的身份验证时间,采用 Unix 时间格式。 
- exp
- 
            您的用户令牌的过期时间,采用 Unix 时间格式。 
- iat
- 
            Amazon Cognito 颁发您的用户令牌的时间,采用 Unix 时间格式。 
- jti
- 
            JWT 的唯一标识符。 
- username
- 
            用户池中用户的用户名。 
访问令牌签名
访问令牌的签名使用在.well-known/jwks.json端点发布的密钥进行签名,可验证令牌标头和有效负载的完整性。当您使用访问令牌授权外部访问时 APIs,请务必将您的 API 授权方配置为根据签名该签名的密钥来验证此签名。有关更多信息,请参阅 验证 JSON 网络令牌。