amazon-web-services - Cognito 刷新令牌过早过期
问题描述
我们有一个使用 AWS Cognito 进行身份验证的应用程序。后端代码(使用 AWS SDK for C# 工作正常)
初次登录后,我们获取ID、Access和Refresh TOKEN。然后每小时我们尝试通过调用来获取新的 ID 和 ACCESS 令牌
public bool ExtendTokens(string userRefreshToken, out AdminInitiateAuthResponse output)
{
output = null;
AdminInitiateAuthRequest request = new AdminInitiateAuthRequest();
AdminInitiateAuthResponse response = new AdminInitiateAuthResponse();
try
{
request.UserPoolId = XXXXXXXXXXX;
request.ClientId = YYYYYYYYYY;
request.AuthFlow = AuthFlowType.REFRESH_TOKEN_AUTH;
request.AuthParameters.Add("REFRESH_TOKEN", userRefreshToken);
response = awsCognito_client.AdminInitiateAuth(request);
if (response != null)
{
output = response;
return true;
}
}
catch (Exception ex)
{
//log the exception and the inner exception!
}
return false;
}
在后端并将它们传递给客户端。(此应用程序的工作方式是客户端每 3 分钟对服务器进行几次调用,然后服务器调用 Cognito 进行身份验证)然后在 60 分钟后,第一次更新令牌(初始登录后 60 分钟)工作正常!但是,(恰好在 2 小时后)我第二次收到此错误:
The remote server returned an error: (400) Bad Request.
Refresh Token has been revoked
对于几个内部/外部用户来说,这恰好发生在点上!他们使用用户名/密码登录后 120 分钟。因此,它不可能是用户退出或我们意外调用 GlobalSignOut 的地方。我已经在几个地方检查了我的代码,我看不出我可能在哪里弄错了!我什至在另一个产品中使用了相同的代码模块,而且那个模块根本不会被淘汰!(那个人不会时不时打电话!)
此外,跟踪用户设备已关闭。所以不可能是这个答案。此外,Cognito 限制文档没有说明每个帐户的调用总数!
其他有用的细节:我们的刷新令牌的默认到期时间是 15 天。这就是为什么我称这两个小时为过早到期!我无法在我的本地主机上重现它,但它发生在部署到 IIS 之后。我检查了设置和 web.configs,我找不到两者之间任何有意义的差异,这会使我的刷新令牌无效!
解决方案
所以,我能够解决这个问题(我仍然不知道根本原因),但避免这种情况的方法是每 45~50 分钟调用一次更新函数,而不是等待 1 小时过去!没有任何意义,但我的会话处于活动状态并且令牌正在更新已经 48 小时。
推荐阅读
- oracle11g - JOOQ DSL 在 LISTAGG() 中解决 ORA-01489 的方法
- python - 尝试绘制图表
- api - 获取 geo/reverse_geocode Twitter API 不起作用
- json - 如何从自定义枚举中删除枚举变体标签?
- python - 如何在熊猫中返回具有多个条件的数据框
- assembly - 如何在 ARM 汇编中使用 push{lr} pop{pc}
- angular - 切换开关更改标签文本并返回布尔值 Angular 11 引导程序
- javascript - 是否能够读取 phython 中的 javascript 文件对象?
- arrays - 扩展运算符在使用 redux 的 ReactNative 应用程序中引发错误
- java - 无法将“”下的属性绑定到 com.zaxxer.hikari.HikariDataSource:spring boot 2.4.1