66

我找不到任何文档来解释是否以及如何修改 AWS Cognito 用户池的访问和身份令牌的到期时间。

文档指定默认情况下在发射后 1 小时到期。

有没有办法修改过期时间?

4

6 回答 6

62

自 2020 年 8 月 12 日起,AWS 宣布用户池现在支持自定义令牌到期时间。以下是要遵循的步骤:

  1. 打开您的 AWS Cognito 控制台。
  2. General Settings
  3. 向下滚动App clients并单击编辑。
  4. 单击Show Details按钮以查看自定义选项,如下所示: 令牌到期自定义屏幕

访问令牌到期时间必须介于 5 分钟到 1 天之间。不能大于刷新令牌过期时间。

有关 AWS cognito 的更多详细信息,您可以点击此链接

于 2020-08-22T06:41:58.850 回答
54

目前无法为您的用户池进行配置。每个人都设置为一小时。

编辑:见 Mike 的评论,这是最近添加的。

于 2017-03-10T18:56:24.803 回答
6

澄清:这个回复是关于访问令牌(不是刷新令牌)

您可以从 cognito 控制台配置令牌过期General Settings////App Clients{your app}Show DetailsRefresh token expiration (days)

https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-using-tokens-with-identity-providers.html

默认情况下,刷新令牌会在您的应用用户登录到您的用户池后 30 天过期。为用户池创建应用程序时,可以将应用程序的刷新令牌过期时间(以天为单位)设置为 1 到 3650 之间的任何值。

似乎目前对于网络客户端来说,不到一天的时间(很奇怪)是没有选择的。

如果您使用移动 SDK,那么

https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-using-tokens-with-identity-providers.html

适用于 Android 的 Mobile SDK 提供了 将 ID 和访问令牌的最短有效期更改为 0 到 30 分钟之间的值的选项。请参阅适用于 Android 的 AWS 移动开发工具包 API 参考中的 CognitoIdentityProviderClientConfig 的 setRefreshThreshold() 方法。

于 2019-03-15T05:10:13.823 回答
6

我认为问题是如何获得对 Cognito 会话终止的精细控制。有一种方法可以做到这一点。但首先让我们回顾一下 Cognito 会话管理的工作原理:

  1. 身份验证令牌在一小时后过期。
  2. 在发布刷新令牌时可能会请求新的身份验证令牌。
  3. 1 到 30 天后,Cognito 将不会发出刷新令牌 - 每个应用程序的天数是在应用程序客户端设置中配置的。

那么,您如何才能更好地控制 Cognito 会话长度?答案是在您的 http 请求堆栈中插入一个过滤器来评估请求 - 如果用户必须出于某种原因注销,请发出 302 重定向到 Cognito 注销端点(并清除您的会话 cookie)。

这就是我们在 Kubernetes 中使用 Envoy(使用代理)和 Spring 所做的。它还允许您连接逻辑,在用户的 1 小时访问令牌过期之前立即撤销对用户的访问。

请参阅https://docs.aws.amazon.com/cognito/latest/developerguide/logout-endpoint.html

于 2019-09-29T21:42:08.293 回答
3

如果您使用 CloudFormation 模板,请添加以下属性并以天为单位指定(尽管官方文档说它默认为小时)访问令牌应该有效的时间。这是访问令牌有效期为 24 天的示例。

UserPoolClient:
    Type: "AWS::Cognito::UserPoolClient"
    Properties:
        ClientName: myuserpoolclient
        GenerateSecret: true
        UserPoolId: !Ref YourUserPool
        AccessTokenValidity: 24

文档: https ://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPoolClient.html#CognitoUserPools-CreateUserPoolClient-request-AccessTokenValidity

于 2020-10-07T11:16:50.753 回答
1

Cognito 使用OAuth 2.0 规范。为了更新过期的令牌,您需要使用Refresh Token值来获取新的Id Token

  1. 为了在开始时进行身份验证,从用户那里收集用户 ID 和密码并发送到 Cognito。
  2. 你拿回两个令牌。一种用于“访问” API,另一种用于在访问到期时“刷新”。
  3. 您无需再次要求用户输入用户名和密码;您只需要使用“刷新”令牌。
  4. 您不需要存储密码的明文(这会产生安全风险),因为“刷新”令牌将为您提供新的访问令牌。

这真的很简单。Cognito 文档中有关刷新令牌的更多信息

于 2019-01-03T10:11:40.530 回答