【发布时间】: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