1、刷新令牌(Refresh Token)
在用户登录时,除了发放一个访问令牌(Access Token)以外,再发放一个刷新令牌(Refrsh Token)。
访问令牌的有效期比较短,刷新令牌的有效期比较长。
当访问令牌过期时,使用刷新令牌向服务器请求新的访问令牌。如果刷新令牌也过期,则跳转回登录界面。
这种方式的优点是可以避免用户频繁登录,但需要妥善保管刷新令牌,因为它的安全性比访问令牌更高。
2、滑动窗口
用户每次使用使用访问令牌时,服务器都会更新访问令牌的过期时间。
这种方式的优点是用户只要频繁访问,就不需要登录,但可能会增加服务器负担。
3、重新登录
当访问令牌过期时,跳转回登录界面,让用户重新登录。这是最简单的一种方式,但可能会影响用户体验。
以下是使用刷新令牌的示例:
const jwt = require('jsonwebtoken'); const secret = 'your-secret-key'; const refreshSecret = 'your-refresh-secret-key'; // 用户登录 app.post('/login', (req, res) => { const { username, password } = req.body; // 验证用户名和密码 const user = authenticate(username, password); if (user) { // 创建 JWT const token = jwt.sign({ id: user.id }, secret, { expiresIn: '1h' }); const refreshToken = jwt.sign({ id: user.id }, refreshSecret, { expiresIn: '7d' }); // 将 JWT 和刷新令牌发送给用户 res.json({ token, refreshToken }); } else { res.status(401).send('Invalid credentials'); } }); // 刷新令牌 app.post('/refresh', (req, res) => { const { refreshToken } = req.body; // 验证刷新令牌 jwt.verify(refreshToken, refreshSecret, (err, decoded) => { if (err) { res.status(401).send('Invalid refresh token'); } else { // 创建新的 JWT const newToken = jwt.sign({ id: decoded.id }, secret, { expiresIn: '1h' }); res.json({ token: newToken }); } }); });
讯享网

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/56228.html