【问题标题】:JWT refresh token strategyJWT 刷新令牌策略
【发布时间】:2022-01-29 00:27:27
【问题描述】:

我在一篇博客 (here) 中看到关于使用 JWT 在 React 中进行身份验证,此设置:访问令牌有效期为 15 分钟,刷新令牌有效期为 1 个月;客户端每 10 分钟调用一次/refreshToken 端点,以检查 refreshToken 是否仍然有效(否则会显示登录屏幕)。

在服务器上,/refreshToken 端点正确地检查了 refreshtoken 没有过期,在 refreshtoken 有效负载中具有 id 的用户仍然存在并且有效(即:传递的 refreshToken 存在于他的 refreshTokens 数组中)。如果一切正常,就会生成一个新的访问令牌,并与响应一起发回。

到目前为止一切顺利。 但是,在返回响应之前,也会生成一个新的refreshToken,并将旧的替换为用户的refreshTokens数组......我认为这种策略是有缺陷的,因为这样用户会永远不会看到他的登录过期,即使刷新令牌(在本例中为一个月)将过期......

我确实做了一些测试(将 1 个月的值降低到 30 分钟),并且有效地用户授权永不过期......强制用户注销删除他的 refreshTokens 数组显然可以正常工作,但我希望注销当刷新令牌按年龄过期时。

请问我的理解是否正确(服务器上的 refreshToken 端点不应该刷新刷新令牌,而只刷新访问令牌),或者我是否遗漏了什么。

UPDATE 在@Ghero 评论之后: 我明白你的意思了......但是如果不更新它的到期,为什么要刷新它?
但是,用于更新刷新令牌的博客代码:

    const jwt = require("jsonwebtoken");

    exports.getRefreshToken = (user) => {
      const refreshToken = jwt.sign(user, process.env.REFRESH_TOKEN_SECRET, {
        expiresIn: eval(process.env.REFRESH_TOKEN_EXPIRY),
      });
      return refreshToken;
    };

    // REFRESH_TOKEN_EXPIRY is set to 30 days

看起来它总是将到期日期推迟 30 天。这样它就永远不会过期...

【问题讨论】:

    标签: javascript reactjs jwt access-token refresh-token


    【解决方案1】:

    在每次使用时替换刷新令牌是当前的最佳做法。

    拥有一次性使用的刷新令牌意味着如果刷新令牌被盗并且多次使用(被您和黑客),令牌服务可以检测到并自动注销用户,从而保护用户免受攻击。

    刷新令牌有一个最长有效时间,例如 30 天,但这通常也是您可以配置的。根据您使用的服务,有不同的刷新令牌生命周期策略。下图展示了 IdentityServer 如何处理刷新令牌:

    【讨论】:

    • 所以用户身份验证永不过期(如果不是强制)这一事实是意料之中的吗?如果是这样,REFRESH_TOKEN_EXPIRY 有什么用?
    • 查看我的更新答案。
    • 对不起,我不明白。我正在配置刷新令牌有效的最长时间。现在是 30 天。现在我将其设置为 30 分钟,仅用于测试目的。我可以确认,如果每次调用 refresh-token 端点时,它都会刷新 refreshToken,它永远不会过期......这是我的测试确认的,refreshToken 在 30 分钟后不会过期(因此它不会在 30 天后过期...),并且用户将永远登录,如果没有在服务器上手动阻止...我想这不是最佳实践。当然我错过了一些东西,但我不明白它是什么......
    • 假设您的服务器配置为刷新令牌有效期为 30 天。客户端每十分钟请求一次新的刷新。颁发了一个新的刷新令牌,但没有更新过期时间(新的刷新令牌继承了“原始”刷新令牌过期时间)。因此,在原始令牌发出 30 天后,无论新的刷新令牌发出多少次,都会提示客户端登录)
    • @Ghero:查看我的更新答案。
    猜你喜欢
    • 2016-03-17
    • 1970-01-01
    • 1970-01-01
    • 2016-03-05
    • 2016-06-25
    • 2018-06-01
    • 1970-01-01
    • 2021-04-06
    • 2017-10-11
    相关资源
    最近更新 更多