我在博客中看到(
here
)关于
JWT React中的身份验证
,此设置:访问令牌到期为15分钟,刷新令牌到期为1个月;客户端每10分钟调用
/refreshToken
端点,以检查refreshToken是否仍然有效(否则将向用户显示登录屏幕)。
在服务器上
/refreshToken
端点正确检查refreshtoken是否未过期,refreshtokne有效负载中id为的用户是否仍然存在且有效(即:传递的refreshtoken存在于他的refreshTokens数组中)。如果一切正常,将生成一个新的访问令牌,并将其与响应一起发送回。
到目前为止还不错。
但是
,在返回响应之前,还会生成一个新的refreshToken,并将其替换为用户的refreshTokens数组中的旧refreshToken。。。我认为这种策略是有缺陷的,因为这样用户会
从不
看到他的登录过期,即使在刷新令牌(本例中为一个月)之后也会过期。。。
我确实做了一些测试(将1个月的值降低到30分钟),实际上用户授权永远不会过期。。。强制用户注销并删除他的refreshTokens数组显然效果不错,但我希望在刷新令牌过期时注销。
我问我的理解是否正确(服务器上的refreshToken端点不应该刷新刷新令牌,而应该只刷新访问令牌),或者我是否遗漏了什么。
更新
在@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天。这样它就永远不会过期。。。