2022-03-30 07:42:50
很多人不推荐使用JWT,主要因为其存在带宽负担大、冗余签名、令牌撤销困难、数据陈旧风险、安全性不足等问题,尤其在生产环境中作为会话管理机制时,可能引发严重的安全和实现隐患。 以下是具体原因分析:
1. 带宽负担大Cookie存储:仅需5字节。
JWT存储:体积增加约51倍,达到255字节。

传统会话Cookie:框架自动处理签名,开发者无需额外操作。
JWT:需手动生成签名,且数据通常仍存储在会话Cookie中,导致双重签名(Cookie级和JWT级),增加计算开销。
注销失效:用户点击注销后,JWT仍可能被恶意使用,直至过期。例如,推特用户注销后,若JWT未过期,攻击者可继续发送推文。
权限更新延迟:用户权限变更(如管理员降级)不会立即生效,需等待JWT过期,期间可能引发越权操作。
用户修改密码后,旧JWT仍可访问系统,直至过期。
传统会话机制通过服务器端校验可实时同步数据状态。
“none”算法攻击:若服务器未严格校验算法字段,攻击者可修改JWT为{"alg": "none"},绕过签名验证。
JWT在特定场景下具有优势,但作为会话管理机制时,其带宽消耗、撤销困难、安全性等问题可能成为系统隐患。生产环境中建议优先使用传统会话机制(如会话Cookie),或结合JWT与短期有效期、黑名单机制等缓解风险。