为什么 JWT 安全如此重要?
JWT(JSON Web Token)已经成为现代 Web 应用和 API 认证的事实标准。从单页应用(SPA)到微服务架构,JWT 被广泛用于身份验证和授权。然而,许多开发者对 JWT 的安全认知仍停留在表面,导致生产环境中频繁出现 Token 泄露、伪造、无限期有效等严重问题。
1. 永远不要在 Payload 中存放敏感信息
这是最常见的误区。JWT 的 Payload 部分只是 Base64 编码,任何人都可以解码查看。因此,绝对不要在 JWT 中存储密码、身份证号、银行卡信息等敏感数据。即使 Token 被签名,也不等于被加密。
正确做法:Payload 中只存放用户 ID、角色、过期时间等非敏感标识信息。如需传递敏感数据,应使用 JWE(JSON Web Encryption)进行加密。
2. 设置合理的过期时间(exp)
很多开发者将 JWT 的过期时间设置为 30 天甚至更长,这意味着一旦 Token 泄露,攻击者可以在很长一段时间内冒充用户。建议 Access Token 设置为 15 分钟到 1 小时,Refresh Token 设置为 7 到 30 天。
3. 使用强密钥和安全的签名算法
HMAC-SHA256 是最常用的对称签名算法,但密钥长度至少应为 256 位(32 字节)。不要使用弱密钥。如果使用非对称算法(RS256/ES256),请妥善保管私钥。
4. 正确的 Token 存储方式
LocalStorage 方便但易受 XSS 攻击。HttpOnly Cookie 更安全,能防止 JavaScript 读取,但需要防范 CSRF 攻击。推荐使用 HttpOnly + Secure + SameSite=Strict 的 Cookie。
5. 实现 Token 吊销机制
JWT 一旦签发就无法在服务端主动吊销。可以考虑维护短期 Token 黑名单、使用版本号字段、或缩短 Access Token 有效期。
总结
遵循以上最佳实践可以大幅降低安全风险。使用我们的 JWT 在线解析工具 可以帮助您快速解码和检查 Token 结构。