本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
管理用户池令牌到期和缓存
每次您想要获取新的 JSON Web 令牌(JWT)时,应用程序都必须成功完成以下请求之一。
-
从您的托管登录页面申请隐式授权。
-
在 Amazon Cognito API 请求中对本地用户进行身份验证,例如。InitiateAuth
您可以将用户群体配置为将令牌设置为在数分钟、数小时或数天后过期。要确保应用程序的性能和可用性,请使用 Amazon Cognito 令牌至大约 75% 的令牌生命周期,并且仅在那时获取新令牌。您为应用程序构建的缓存解决方案可保持令牌可用,并可防止 Amazon Cognito 在您的请求速率过高时拒绝请求。客户端应用程序必须将令牌存储在内存缓存中。服务器端应用程序可以添加加密的缓存机制来存储令牌。
当您的用户池生成大量用户或 machine-to-machine活动时,您可能会遇到 Amazon Cognito 对您可以发出的令牌请求数量设定的限制。要减少您向 Amazon Cognito 端点发出的请求数量,可以安全地存储和重复使用身份验证数据,也可以实施指数回退和重试。
身份验证数据来自两类端点。Amazon Cognito OAuth2.0 终端节点包括令牌终端节点,该终端节点为客户端凭证和托管登录授权码请求提供服务。服务端点应答用户群体 API 请求,例如 InitiateAuth
和 RespondToAuthChallenge
。每种类型的请求都有自己的限制。有关 限制的更多信息,请参阅 Amazon Cognito 中的限额。
使用 Amazon API Gateway 缓存 machine-to-machine访问令牌
借助 API Gateway 令牌缓存,您的应用程序可以扩展以响应大于 Amazon Cognito OAuth 终端节点默认请求速率配额的事件。

您可以缓存访问令牌,以便您的应用程序仅在缓存的令牌过期时才请求新的访问令牌。否则,您的缓存端点会从缓存中返回一个令牌。这会阻止对 Amazon Cognito API 端点的其他调用。当您使用 Amazon API Gateway 作为 令牌端点的代理时,您的 API 会响应大多数原本会计入您的请求配额的请求,从而避免由于速率限制而导致的请求失败。
以下基于 API Gateway 的解决方案提供了低延迟、低代码/无代码的令牌缓存实施。API Gateway APIs 在传输过程中进行加密,也可以选择静态加密。API Gateway 缓存非常适合 OAuth 2.0 客户端凭证授予
在此解决方案中,您可以在 API 中定义一个缓存,以便为要在应用中请求的 OAuth 范围和应用程序客户端的每种组合存储单独的访问令牌。当您的应用程序发出与缓存键匹配的请求时,您的 API 会使用 Amazon Cognito 向与缓存键匹配的第一个请求颁发的访问令牌进行响应。当您的缓存键持续时间到期时,API 会将请求转发到令牌端点并缓存新的访问令牌。
注意
您的缓存键持续时间必须短于应用程序客户端的访问令牌持续时间。
缓存密钥是您在请求正文scope
参数中请求的 OAuth 作用域和请求Authorization
标头的组合。Authorization
标头包含您的应用程序客户端 ID 和客户端密钥。您无需在应用程序中实施其他逻辑即可实施此解决方案。您只必须更新配置以更改用户群体令牌端点的路径。
您也可以使用 ElastiCache (Redis OSS) 实现令牌缓存。要使用 AWS Identity and Access Management (IAM) 策略进行精细控制,请考虑 Amazon DynamoDB 缓存。
注意
在 API Gateway 中缓存需要支付额外费用。有关更多详细信息,请参阅定价。
使用 API Gateway 设置缓存代理
-
打开 API Gateway 控制台
,然后创建一个 REST API。 -
在 Resources(资源)中,创建一个 POST 方法。
-
选择 HTTP Integration type(集成类型)。
-
选择 Use HTTP proxy integration(使用 HTTP 代理集成)。
-
输入 Endpoint URL(端点 URL)
https://
。<your user pool domain>
/oauth2/token
-
-
在 Resources(资源)中,配置缓存键。
-
编辑 POST 方法的 Method request(方法请求)。
-
将您的
scope
参数和Authorization
标头设置为缓存键。-
向 URL query string parameters(URL 查询字符串参数)中添加一个查询字符串,并为
scope
字符串选择 Caching(缓存)。 -
向 HTTP request headers(HTTP 请求标头)中添加一个标头,并为
Authorization
标头选择 Caching(缓存)。
-
-
-
在 Stages(阶段)中,配置缓存。
-
选择要修改的舞台,然后从 “舞台细节” 中选择 “编辑”。
-
在 “其他设置” 下的 “缓存设置” 下,打开 “配置 API 缓存” 选项。
-
选择 Cache capacity(缓存容量)。较高的缓存容量可以提高性能,但会带来额外的成本。
-
清除需要授权复选框。选择继续。
-
API Gateway 仅将缓存策略应用于阶段级别的 GET 方法。您必须对您的 POST 方法应用缓存策略替代。
展开您配置的阶段并选择
POST
方法。要为该方法创建缓存设置,请选择创建覆盖。 -
激活 “启用方法缓存” 选项。
-
输入 3600 秒的缓存 time-to-live (TTL)。选择保存。
-
-
在 Stages(阶段)中,注意 Invoke URL(调用 URL)。
-
更新您的应用程序,以将令牌请求发布到 API 的 Invoke URL(调用 URL)而不是用户群体的
/oauth2/token
端点。