JSON Web Token(JWT)广泛用于无状态身份认证,但配置不当会引入严重漏洞。
一、算法混淆攻击
早期库允许客户端通过头部 alg 字段指定算法。攻击者将 alg 改为 none 或把 RS256 改为 HS256,利用公钥作为 HMAC 密钥伪造令牌。
json
{
"alg": "HS256",
"typ": "JWT"
}防御方式:服务端固定预期算法,绝不信任头部 alg 字段。
二、令牌吊销难题
JWT 无状态特性导致无法直接注销。常见方案包括:
- 维护短期黑名单(Redis 存储
jti) - 使用短有效期 Access Token + 长效 Refresh Token
- 在令牌中嵌入版本号,用户改密时递增版本使旧令牌失效