【问题标题】:How to implement the refreshing of JTWs in React?如何在 React 中实现 JTW 的刷新?
【发布时间】:2020-11-03 10:10:11
【问题描述】:

This question 讲述了使用刷新令牌延长访问令牌寿命的理论和工作流程。

正如链接答案所建议的那样,我应该在 (1) 打开应用程序时进行过期检查,(2) 每 x 小时定期检查一次,如果访问令牌即将过期,则刷新访问令牌。

我的问题是,我究竟如何在 React 或任何前端代码中实现这一点?

假设我的单页应用有 3 个页面,每个页面有 5 个组件。

当用户打开应用程序时,它可能是 3 个 URL 中的任何一个,哪个组件(如果有)应该负责这个检查?这是否应该阻止任何其他组件在验证完成之前获取数据?

同样,哪个组件(如果有)应该进行周期检查?

我在想,只要上述 2 条正确执行,就不可能出现用户使用过期访问令牌发出请求的情况。至少,我想不出会发送过期访问令牌的边缘情况。这是正确的吗?

【问题讨论】:

    标签: jwt jwt-auth express-jwt


    【解决方案1】:

    理想情况下,您的 API 调用中应该有一个处理程序,该处理程序将检查 JWT 是否即将到期,并抢先执行对服务器的额外调用以请求替换令牌。如果用户正在积极地与您的应用程序交互,则应在需要时而不是更频繁地进行刷新,从而减少对您的应用程序的调用次数。

    在我的一个项目中,我们有一个APIClient 类,其中包含我们需要执行的所有调用的方法,例如getOwnUsergetTicketById,它们每个调用一个实际执行请求的方法, fetchJSON.

    fetchJSON 方法在执行请求之前使用存储在 cookie 中的日期检查 JWT 的有效性。如果它即将到期或已过期,该方法将执行另一个调用以使用在发布原始(或后续替换)令牌时发布的refreshToken 请求新令牌。如果旧令牌尚未过期,则可以同时执行这两个调用,因此不会对用户造成延迟。

    这样做的一个缺点是现有的可能未过期的 JWT 仍然有效,并且如果获得它仍然可以使用(!)。为了纠正这个问题,您可以简单地等到 JWT 过期后再更新它,尽管这可能会在发生额外调用时导致用户暂时滞后。虽然,这是你试图避免的结果。

    只要您避免将 JWT 和刷新令牌(如果您选择使用它)存储在本地存储中,就可以了。您还应该确保 JWT 的有效期相当短(我们使用 15 分钟),因为如果不减慢服务器端验证并使其使用变得毫无意义,就不可能撤销它们。

    【讨论】:

      猜你喜欢
      • 2021-11-23
      • 1970-01-01
      • 1970-01-01
      • 2014-01-29
      • 1970-01-01
      • 2020-05-26
      • 2018-02-15
      • 2018-09-27
      • 2022-12-22
      相关资源
      最近更新 更多