科技Bestblogs·减瓦··AI 生成
被吹上天的 JWT,为什么主流网站一个都不用
文章通过分析GitHub、Google等主流网站的实际认证机制,论证了JWT在浏览器会话场景下相比传统Session的全面劣势:不可撤销、安全性不佳且复杂度更高。作者指出JWT适用于服务间调用而非用户会话,其“无状态”特性在需要撤销时便不复存在。文章提供了具体场景的选型建议,适合正在做系统设计选型或对认证机制有深入理解需求的后端开发者阅读。原文 ↗原文 ↗
核心观点
- ▍JWT不是为浏览器会话设计的,它适合的是服务间调用、离线校验和机器身份自证,用于用户会话在撤销、安全与复杂度上全面劣于服务端Session。
- ▍真正的选型轴不是「无状态对有状态」,而是状态放在哪里、认证结论允许陈旧多久。
- 01GitHub、Google、Amazon、Netflix等主流网站的浏览器端认证用的都是服务端Session加Cookie,没有一条JWT。
- 02JWT签出后无法撤销,要撤销就必须维护黑名单并每请求查询,此时无状态特性消失。缩短过期时间配合refresh token只能将吊销控制在续期边界,无法阻止五分钟窗口内的攻击。
- 03JWT的payload只是Base64编码而非加密,同源JavaScript完全可见;算法混淆、alg:none、Shiro CVE-2016-4437等实现层漏洞说明凭证机制越复杂出错面越大。
- 04大多数JWT用法只是用更重的版本模拟Session:签发只有userId的token每次查库,开销比Session更大,且token里的角色信息在权限回收后依然有效。
- 05IETF在2025年定稿的RFC 10017推荐BFF架构:SPA只与轻量后端对话,token存在服务端,浏览器只拿一条HttpOnly会话Cookie。
反方 / 局限
- — 作者承认在服务间调用、微服务网关鉴权、一次性凭证等场景,JWT的离线校验和自带签名特性确实有不可替代的价值,文章讨论的是被滥用的浏览器会话场景。
前置背景
平行视角
未来推演
延伸追问