【问题标题】:Cognito Refresh Token Expires prematurelyCognito 刷新令牌过早过期
【发布时间】:2020-02-05 06:01:28
【问题描述】:

我们有一个使用 AWS Cognito 进行身份验证的应用程序。后端代码(使用 AWS SDK for C# 工作正常)

初始登录后,我们获取ID、访问和刷新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 的地方。我已经在几个地方检查了我的代码,我看不出我可能在哪里弄错了!我什至在另一个产品中使用了相同的代码模块,而那个模块根本不会被淘汰! (那个人不会时不时打电话!)

此外,跟踪用户设备已关闭。所以它不可能是this answer。 此外,Cognito Limitation document 并没有说明每个帐户的通话总数!

其他有用的细节:我们的刷新令牌的默认有效期为 15 天。这就是为什么我称这两个小时为过早到期! 我无法在我的本地主机上重现它,但它发生在部署到 IIS 之后。我检查了设置和 web.configs,但我找不到两者之间任何有意义的差异,这会使我的刷新令牌无效!

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-24
      • 2017-10-19
      • 2021-03-07
      • 2015-11-04
      • 2019-08-05
      • 2017-12-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多