管理用户池令牌到期和缓存 - Amazon Cognito

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

管理用户池令牌到期和缓存

每次您想要获取新的JSON网络令牌(JWT)时,您的应用程序都必须成功完成以下请求之一。

  • 令牌端点请求客户端凭证或授权代码授予

  • 从您的托管 UI 请求隐式授权。

  • 在 Amazon Cognito API 请求中对本地用户进行身份验证,例如。InitiateAuth

您可以将用户群体配置为将令牌设置为在数分钟、数小时或数天后过期。为确保应用程序的性能和可用性,请在代币生命周期的大约 75% 内使用 Amazon Cognito 令牌,然后才能检索新的令牌。您为应用程序构建的缓存解决方案可保持令牌可用,并可防止 Amazon Cognito 在您的请求速率过高时拒绝请求。客户端应用程序必须将令牌存储在内存缓存中。服务器端应用程序可以添加加密的缓存机制来存储令牌。

当您的用户池生成大量用户或 machine-to-machine活动时,您可能会遇到 Amazon Cognito 对您可以发出的令牌请求数量设定的限制。要减少您向 Amazon Cognito 端点发出的请求数量,可以安全地存储和重复使用身份验证数据,也可以实施指数回退和重试。

身份验证数据来自两类端点。Amazon Cognito OAuth2.0 终端节点包括令牌终端节点,该终端节点为客户端凭证和托管的用户界面授权码请求提供服务。服务端点会响应用户池API请求InitiateAuth,例如和RespondToAuthChallenge。每种类型的请求都有自己的限制。有关 限制的更多信息,请参阅 Amazon Cognito 中的限额

使用 Amazon API 网关缓存 machine-to-machine访问令牌

借助 API Gateway 令牌缓存,您的应用程序可以扩展以响应大于 Amazon Cognito OAuth 终端节点默认请求速率配额的事件。

API网关维护 M2M 访问令牌缓存的示意图。API代理处理令牌请求,如果缓存的令牌已经有效,则返回缓存的令牌。

您可以缓存访问令牌,以便您的应用程序仅在缓存的令牌过期时才请求新的访问令牌。否则,您的缓存端点会从缓存中返回一个令牌。这样可以防止对 Amazon Cognito API 终端节点进行额外调用。当您使用 Amazon API Gateway 作为代理时令牌端点,您会对本来会增加请求配额的大部分请求做出API响应,从而避免由于速率限制而导致请求失败。

以下API基于网关的解决方案提供了一种低延迟、低代码/无代码的令牌缓存实现。API网关APIs在传输过程中进行加密,也可以选择在静态时加密。APIGateway 缓存非常适合 OAuth 2.0 客户端凭证授予,这是一种通常是大批量的授予类型,用于生成用于授权 machine-to-machine和微服务会话的访问令牌。在诸如流量激增导致您的微服务水平扩展的情况下,您最终可能会有许多系统使用相同的客户端凭据,但其数量超过用户池或应用程序客户端的 AWS 请求速率限制。要保持应用程序可用性和低延迟,缓存解决方案是此类情况下的最佳实践。

在此解决方案中,您可以在中定义一个缓存,以便为API要在应用中请求的OAuth范围和应用程序客户端的每种组合存储单独的访问令牌。当您的应用程序发出与缓存密钥匹配的请求时,您将使用 Amazon Cognito 向第一个与缓存密钥匹配的请求发出的访问令牌进行API响应。当您的缓存密钥持续时间到期时,会将请求API转发到您的令牌端点并缓存新的访问令牌。

注意

您的缓存键持续时间必须短于应用程序客户端的访问令牌持续时间。

缓存密钥是您在scopeURL参数中请求的OAuth作用域和请求Authorization标头的组合。Authorization 标头包含您的应用程序客户端 ID 和客户端密钥。您无需在应用程序中实施其他逻辑即可实施此解决方案。您只必须更新配置以更改用户群体令牌端点的路径。

您也可以使用 ElastiCache (RedisOSS) 实现令牌缓存。要使用 AWS Identity and Access Management (IAM) 策略进行精细控制,可以考虑使用 Amazon Dynam oDB 缓存

注意

在 API Gateway 中进行缓存需要支付额外费用。有关更多详细信息,请参阅定价。

使用 Gate API way 设置缓存代理

  1. 打开API网关控制台并创建一个RESTAPI。

  2. 资源中,创建一个POST方法。

    1. 选择HTTP集成类型

    2. 选择 “使用HTTP代理集成”。

    3. 输入终端节URL点https://<your user pool domain>/oauth2/token

  3. Resources(资源)中,配置缓存键。

    1. 编辑您的方法的POST方法请求

    2. 将您的 scope 参数和 Authorization 标头设置为缓存键。

      1. 向查询字符串参数中添加URL查询字符串,然后为该scope字符串选择 “缓存”。

      2. HTTP请求标头中添加标头,然后为标Authorization头选择缓存

  4. Stages(阶段)中,配置缓存。

    1. 选择您想要修改的阶段。

    2. “设置” 下,选择 “启用API缓存”。

    3. 选择 Cache capacity(缓存容量)。

    4. 选择 3600 秒的缓存 time-to-live (TTL)

    5. 清除需要授权复选框。

  5. 阶段中,请注意调用URL

  6. 将您的应用程序更新为对您的 Invok e URL(API而不是用户池的/oauth2/token终端节点)的请求进行POST令牌。