本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
管理用户池令牌到期和缓存
每次您想要获取新的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 终端节点默认请求速率配额的事件。
您可以缓存访问令牌,以便您的应用程序仅在缓存的令牌过期时才请求新的访问令牌。否则,您的缓存端点会从缓存中返回一个令牌。这样可以防止对 Amazon Cognito API 终端节点进行额外调用。当您使用 Amazon API Gateway 作为代理时令牌端点,您会对本来会增加请求配额的大部分请求做出API响应,从而避免由于速率限制而导致请求失败。
以下API基于网关的解决方案提供了一种低延迟、低代码/无代码的令牌缓存实现。API网关APIs在传输过程中进行加密,也可以选择在静态时加密。APIGateway 缓存非常适合 OAuth 2.0 客户端凭证授予
在此解决方案中,您可以在中定义一个缓存,以便为API要在应用中请求的OAuth范围和应用程序客户端的每种组合存储单独的访问令牌。当您的应用程序发出与缓存密钥匹配的请求时,您将使用 Amazon Cognito 向第一个与缓存密钥匹配的请求发出的访问令牌进行API响应。当您的缓存密钥持续时间到期时,会将请求API转发到您的令牌端点并缓存新的访问令牌。
注意
您的缓存键持续时间必须短于应用程序客户端的访问令牌持续时间。
缓存密钥是您在scope
URL参数中请求的OAuth作用域和请求Authorization
标头的组合。Authorization
标头包含您的应用程序客户端 ID 和客户端密钥。您无需在应用程序中实施其他逻辑即可实施此解决方案。您只必须更新配置以更改用户群体令牌端点的路径。
您也可以使用 ElastiCache (RedisOSS) 实现令牌缓存。要使用 AWS Identity and Access Management (IAM) 策略进行精细控制,可以考虑使用 Amazon Dynam oDB 缓存。
注意
在 API Gateway 中进行缓存需要支付额外费用。有关更多详细信息,请参阅定价。
使用 Gate API way 设置缓存代理
-
打开API网关控制台
并创建一个RESTAPI。 -
在资源中,创建一个POST方法。
-
选择HTTP集成类型。
-
选择 “使用HTTP代理集成”。
-
输入终端节URL点
https://
。<your user pool domain>
/oauth2/token
-
-
在 Resources(资源)中,配置缓存键。
-
编辑您的方法的POST方法请求。
-
将您的
scope
参数和Authorization
标头设置为缓存键。-
向查询字符串参数中添加URL查询字符串,然后为该
scope
字符串选择 “缓存”。 -
在HTTP请求标头中添加标头,然后为标
Authorization
头选择缓存。
-
-
-
在 Stages(阶段)中,配置缓存。
-
选择您想要修改的阶段。
-
在 “设置” 下,选择 “启用API缓存”。
-
选择 Cache capacity(缓存容量)。
-
选择 3600 秒的缓存 time-to-live (TTL)。
-
清除需要授权复选框。
-
-
在阶段中,请注意调用URL。
-
将您的应用程序更新为对您的 Invok e URL(API而不是用户池的
/oauth2/token
终端节点)的请求进行POST令牌。