JWT 安全最佳实践完整指南
10 min read
JWT, Security, Authentication
安全最佳实践
在应用程序中实施 JWT 时,遵循安全最佳实践对于防止漏洞至关重要。
1. 使用强密钥
始终使用强随机密钥来签署 JWT。避免使用可预测或简短的密钥。
// 不好
const secret = "password123";
// 好
const secret = crypto.randomBytes(64).toString('hex');
2. 设置适当的过期时间
JWT 应该有较短的过期时间,以最小化攻击者的机会窗口。
{
"exp": Math.floor(Date.now() / 1000) + (60 * 15), // 15 分钟
"iat": Math.floor(Date.now() / 1000)
}
3. 使用 HTTPS
始终通过 HTTPS 传输 JWT 以防止中间人攻击。
4. 验证所有声明
始终验证发行者、受众和过期声明:
function validateToken(token) {
const decoded = jwt.verify(token, secret);
if (decoded.iss !== 'your-app.com') {
throw new Error('无效的发行者');
}
if (decoded.exp < Date.now() / 1000) {
throw new Error('令牌已过期');
}
return decoded;
}
5. 不要存储敏感数据
JWT 是编码的,不是加密的。永远不要在载荷中存储密码或信用卡号等敏感信息。
6. 实现令牌刷新
使用刷新令牌来维护用户会话,而不暴露长期访问令牌。
7. 使用适当的算法
在分布式系统中,优先使用 RS256 或 ES256 而不是 HS256 以获得更好的安全性。