我找不到任何文档来解释是否以及如何修改 AWS Cognito 用户池的访问和身份令牌的到期时间。
该文档指定默认情况下在发射后 1 小时到期。
有没有办法修改过期时间?
目前无法为您的用户池进行配置。每个人都设置为一小时。
编辑:见 Mike 的评论,这是最近添加的。
澄清:这个回复是关于访问令牌(不是刷新令牌)
您可以从 cognito 控制台配置令牌过期General Settings
////App Clients
{your app}
Show Details
Refresh token expiration (days)
默认情况下,刷新令牌会在您的应用用户登录到您的用户池后 30 天过期。为用户池创建应用程序时,可以将应用程序的刷新令牌过期时间(以天为单位)设置为 1 到 3650 之间的任何值。
似乎目前对于网络客户端来说,不到一天的时间(很奇怪)是没有选择的。
如果您使用移动 SDK,那么
适用于 Android 的 Mobile SDK 提供了 将 ID 和访问令牌的最短有效期更改为 0 到 30 分钟之间的值的选项。请参阅适用于 Android 的 AWS 移动开发工具包 API 参考中的 CognitoIdentityProviderClientConfig 的 setRefreshThreshold() 方法。
我认为问题是如何获得对 Cognito 会话终止的精细控制。有一种方法可以做到这一点。但首先让我们回顾一下 Cognito 会话管理的工作原理:
那么,您如何才能更好地控制 Cognito 会话长度?答案是在您的 http 请求堆栈中插入一个过滤器来评估请求 - 如果用户必须出于某种原因注销,请发出 302 重定向到 Cognito 注销端点(并清除您的会话 cookie)。
这就是我们在 Kubernetes 中使用 Envoy(使用代理)和 Spring 所做的。它还允许您连接逻辑,在用户的 1 小时访问令牌过期之前立即撤销对用户的访问。
请参阅https://docs.aws.amazon.com/cognito/latest/developerguide/logout-endpoint.html
如果您使用 CloudFormation 模板,请添加以下属性并以天为单位指定(尽管官方文档说它默认为小时)访问令牌应该有效的时间。这是访问令牌有效期为 24 天的示例。
UserPoolClient:
Type: "AWS::Cognito::UserPoolClient"
Properties:
ClientName: myuserpoolclient
GenerateSecret: true
UserPoolId: !Ref YourUserPool
AccessTokenValidity: 24
Cognito 使用OAuth 2.0 规范。为了更新过期的令牌,您需要使用Refresh Token值来获取新的Id Token。
这真的很简单。Cognito 文档中有关刷新令牌的更多信息