为何JWE令牌的普及度不及JWT令牌?
你提到的点很准确——JWE确实能解决JWS(也就是大家常说的“JWT”)载荷明文存储的安全问题,但它没能普及主要有这些实际原因:
复杂度与性能开销:JWE的加密解密流程比JWS复杂得多,涉及密钥协商、对称/非对称加密的组合使用,开发时要处理更多细节,运行时也会带来额外的性能损耗。对于很多只需要传递用户ID、角色这类非敏感标识的场景,加密完全是“过度设计”,开发者没必要给自己加负担。
认知与生态滞后:市面上绝大多数JWT教程、开源库都是围绕JWS做的,开发者入门学的是JWS,项目里用的也是JWS相关工具。JWE的资料少,甚至很多开发者都不知道JWE是JWT标准的一部分,更别说主动去用它了。生态不成熟又反过来导致大家更不愿意尝试,形成了循环。
场景需求不匹配:很多使用JWS的场景,载荷里的信息本身就没什么敏感价值——比如用户ID、过期时间、基础角色,就算被第三方解码出来,也不会造成安全风险。真要传递敏感数据(比如用户手机号、权限详情),很多团队会选择像会话ID那样,把敏感数据存在服务器端数据库里,JWS只存一个标识,根本不需要把敏感信息放进令牌里,自然也用不上JWE。
历史路径依赖:早期JWT推广时,JWS因为简单易用先火了起来,大量系统、框架都基于JWS做了集成。现在要换成JWE,意味着要修改认证逻辑、替换依赖库、重新做密钥管理,对已经稳定运行的系统来说,迁移成本远大于收益,所以很少有人愿意动。
当然,如果你确实有在令牌里存敏感数据的需求,JWE绝对是更安全的选择——只是大部分场景下,开发者觉得没必要为了那点“潜在风险”付出额外的成本。
内容的提问来源于stack exchange,提问作者zola25

