【问题标题】:What happens to JWT refresh token that is yet to expire in a node application?节点应用程序中尚未过期的 JWT 刷新令牌会发生什么?
【发布时间】:2022-01-21 05:56:00
【问题描述】:

我正在构建一个博客应用程序。我使用了 node.js、expressjs、mongodb 和 reactjs。这就是我在应用中实现 jwt 系统的方式:

当用户登录时,用户会生成 accessToken 和 refresh_Token。 accessToken 将在 15 分钟后过期,而 refresh_Token 在 30 天后过期。我还将 refresh_Token 存储在 redis 数据库中。

我为刷新令牌创建了一个路由,以便用户可以在不注销的情况下生成另一个 accessToken。现在,在通过刷新路由重新生成一个新的 accessToken 时,用户也生成了一个新的 refresh_Token。我读到我应该这样做。 我的问题是:每次生成新的 accessToken 和 refresh_Token 时,以前的 refresh_Tokens 会发生什么?由于 refresh_Token 路由每 15 分钟调用一次以在 30 天到期之前生成新的 accessToken 和 refresh_Token 吗?他们被保存在某个地方吗? 使用 redis.set(),以前的 refresh_Tokens 总是被新的替换。所以,我在redis数据库中看不到之前的token。它们在过期和失效前的 30 天内保存在哪里?

【问题讨论】:

  • 它们在过期和失效前的 30 天内保存在哪里?这不应该是您逻辑的一部分吗?
  • 刷新令牌生成时,存储在redis数据库中。我就是这样写的。现在,每 15 分钟调用一次刷新路由,并再次生成一个新的 refresh_Token 和 accessToken。新的 refresh_Token 通过替换前一个来存储在 redis 数据库中。但是,旧的已经不在redis中了。我想知道它在哪里。

标签: node.js mongodb jwt


【解决方案1】:

JWT 是自给自足的,因此通常您对服务器端(发行者)已发行的令牌没有任何影响。如果服务器端没有实现其他逻辑(例如,黑名单),刷新令牌将一直有效,直到它的到期日期有效。

在使用 JWT 之前请考虑这篇文章:https://developer.okta.com/blog/2017/08/17/why-jwts-suck-as-session-tokens(它提到了缺点,但也提到了优点,只需滚动一下 :))

这个问题也可能有用:JWT (JSON Web Token) automatic prolongation of expiration

【讨论】:

    猜你喜欢
    • 2021-09-14
    • 1970-01-01
    • 2018-10-17
    • 2018-08-05
    • 2020-06-22
    • 2019-07-04
    • 2018-07-22
    • 1970-01-01
    • 2021-12-21
    相关资源
    最近更新 更多