Cognito刷新令牌过早过期

时间:2019-10-07 22:44:50

标签: amazon-web-services authentication amazon-cognito

我们有一个使用AWS Cognito进行身份验证的应用程序。后端代码(使用适用于C#的AWS开发工具包通常效果很好)

首次登录后,我们获得ID,访问权和刷新令牌。然后,我们每小时都会尝试通过调用

来获取新的ID和访问令牌
  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的地方。我已经在几个地方检查过我的代码,看不到我可能在哪里乱糟糟的地方!我什至在另一种产品中使用了相同的代码模块,而且一点都不被淘汰! (那个人不时会打电话!)

此外,“跟踪用户设备”处于关闭状态。因此它不能是this answer。 此外,Cognito Limitation document没有说出每个帐户的总通话次数!

其他有用的信息:刷新令牌的默认有效期为15天。这就是为什么我将这两个小时提前到期! 我无法在本地主机上重现此错误,但是在部署到IIS之后会发生。我已经检查了设置和web.configs,发现两者之间没有任何有意义的区别,这些区别会使我的刷新令牌无效!

1 个答案:

答案 0 :(得分:1)

所以,我能够解决这个问题(我仍然不知道根本原因),但是避免这种情况的方法是每45〜50分钟调用一次renew函数,而不是等待那一小时!没任何意义,但我的会话已处于活动状态并且令牌已更新48小时。