




























双Token机制是通过两种令牌管理用户认证与授权的方案,核心令牌包括:
JWT是双Token机制中Access Token的常用格式,由三部分组成:
用户登录
正常访问流程
Authorization: Bearer <token>)。 Access Token过期
Refresh Token过期
HttpOnly Cookie存储,防止XSS攻击窃取令牌。 const jwt = require('jsonwebtoken');
// 生成Access Token(15分钟过期)
function generateAccessToken(user) {
return jwt.sign(
{ sub: user.id, role: user.role }, // 负载信息
'access_secret_key', // 签名密钥
{ expiresIn: '15m' }
);
}
// 生成Refresh Token(7天过期)
function generateRefreshToken(user) {
return jwt.sign(
{ sub: user.id }, // 简化负载(仅需用户标识)
'refresh_secret_key',
{ expiresIn: '7d' }
);
}
HttpOnly Cookie存储(需配合Secure属性,避免明文传输)。 function verifyAccessToken(req, res, next) {
const token = req.headers.authorization?.split(' ')[1]; // 解析Bearer Token
if (!token) return res.status(401).json({ message: '缺少访问令牌' });
jwt.verify(token, 'access_secret_key', (err, decoded) => {
if (err) return res.status(403).json({ message: '令牌无效或过期' });
req.user = decoded; // 将用户信息附加到请求对象
next(); // 继续处理请求
});
}
function refreshTokenHandler(req, res) {
const refreshToken = req.body.refreshToken; // 从请求体获取Refresh Token
// 验证Refresh Token
jwt.verify(refreshToken, 'refresh_secret_key', (err, user) => {
if (err) return res.status(403).json({ message: '刷新令牌无效' });
// 生成新的Access Token
const newAccessToken = generateAccessToken(user);
res.json({ accessToken: newAccessToken });
});
}
除非注明,否则均为李锋镝的博客原创文章,转载必须以链接形式标明本文链接
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。