用于刷新Cognito IdToken的React-Redux策略

时间:2018-02-08 15:58:53

标签: reactjs authentication redux amazon-cognito refresh-token

我正在使用以下的软件包组合:

  • 反应
  • 终极版
  • 反应-cognito
  • react-router(v4)
  • 终极版-佐贺

(我不承认我对所有这些都很新)

目前我有一个PrivateRoute组件,它将检查(并在必要时刷新)路由更改时过期的IdToken。这很有效。

我的问题是,如果浏览器在令牌到期后打开到PrivateRoute,它正在轮询我的API并在其“授权”标题中发送IdToken。 API将开始返回401.

我想到的选项:

API错误

我可以捕获401错误并发送一个动作来刷新令牌,但是

  1. 如果刷新令牌有任何问题我会在无限循环中敲击AWS,所以需要一些逻辑来捕获并防止这种情况发生。如果刷新失败,可能会重定向到登录路由?

  2. 然后我需要为我的应用程序中的所有私有API调用添加复杂性以获得此逻辑,并在成功刷新后重新执行所请求的API调用。

  3. 抢先API错误

    对我而言,分离API调用并保持身份验证令牌有效更有意义。考虑到react-cognito将令牌到期时间存储在cognito.user.signInUserSession.idToken.payload.exp中,也许可以预先激活API调用和到期。

    如何最好地做到这一点?在登录时,可以使用setTimeout为将来的(currentTime - expiryTime - someBuffer)秒“调度”刷新操作。

    • 我假设(尚未验证)AWS会让您在IdToken过期之前刷新它。我不想等到之后其他API调用可能已经失败。
    • 是否有使用setTimeout的问题,超时可能长达1小时?

    或者我可以设置一些内容来经常轮询cognito.user.signInUserSession.idToken.payload.exp以检测并刷新几乎过期的令牌?

    有什么建议吗?

0 个答案:

没有答案