开发者工具 · JWT 解码器
JWT 与会话 Cookie:无状态令牌如何改变 Web 身份验证
· 背景
jwt 身份验证 网络安全
在 JWT 承诺无状态之前,服务器端会话多年来一直统治着 Web 身份验证。这篇文章追踪了这种转变,权衡了它带来的成本,并描述了大多数团队最终采用的混合设计。
为什么不直接使用会话 cookie? — 在采用 JWT 之前需要真正回答的问题
在采用 JWT 之前,询问服务器端会话无法解决哪些问题。用大型独立凭证替换不透明的 cookie 值会改变撤销、披露和验证责任。无状态性是众多属性之一,而不是自动安全性或可扩展性升级。
ToolAcre 可以显示 JWT 执行每个请求的内容,但它无法比较应用程序吞吐量或规定架构。使用解码的大小和声明作为证据,然后根据您的部署、威胁模型和现有会话基础设施对其进行权衡。
服务器端会话 - cookie 中指向服务器状态的不透明 ID,以及该模型的优点
在传统的服务器端会话中,浏览器持有一个不透明的标识符,服务器将其映射到当前状态。该查找提供了一个自然的位置来结束会话、更改权限和保留数据远离客户端。它还创建了存储和可用性责任。
cookie 和会话不是同义词:cookie 是传输容器,而状态则存在于服务器上。它的安全性取决于属性、起源边界和应用程序行为。看起来随机的会话 ID 仍然是一个承载凭证,不能随意泄露。
自包含验证可以减少共享会话查找;它不会自动在服务之间创建信任
自包含令牌使资源服务器可以验证受保护的字节和声明,而无需对每个请求进行共享会话查找。这可以适合分布式系统,但跨服务信任不是由该格式创建的。服务仍然需要可信的发行者密钥、可接受的算法、受众政策和兼容的令牌配置文件。
ToolAcre 不提供这些信任关系。它对标头和有效负载进行解码,并将签名报告为未经验证。跳过其自身配置的服务仅用不安全的接受路径替换中央会话依赖项。
成本 — 撤销、每个请求中的令牌大小以及 cookie 和 Web 存储之间的存储困境
自包含凭证可能会更大,因为声明和加密材料会重复传输。除非引入外部状态或较短的接受窗口,否则立即撤销会变得更加困难。 Cookie、浏览器内存或网络存储中的存储会改变而不是消除暴露。
可读有效负载还可能跨日志和中介复制个人或授权数据。最大限度地减少索赔并避免将编码视为机密。会话标识符公开的结构较少,但在会话保持活动状态时,盗窃仍然可以授予权限。
CSRF 和 XSS 取决于凭证传输和存储选择,而不仅仅是 JWT 与会话标签
CSRF 风险与浏览器自动附加的凭据密切相关,而 XSS 可以暴露页面脚本可用的数据和操作。 Cookie 中的 JWT 不会停止受到 Cookie 传输行为的影响,并且 Web 存储中的会话标识符不会停止作为承载秘密。
因此,仅凭格式标签无法选择防御。模型存储凭据、谁可以读取凭据、浏览器何时发送凭据以及如何保护状态更改请求。避免简单地声称一种架构“解决 CSRF”或“解决 XSS”。
工作示例 — 使用会话和 JWT 逐步描述的相同登录流程
在会话流中,登录建立服务器状态并返回不透明标识符;稍后的请求会呈现它,并且服务器会加载当前策略。在 JWT 流程中,登录发出受保护的令牌;后面的请求发送较大的值,资源服务器会验证它以及相关的声明。
注销可以删除两个流程中的浏览器副本,但服务器立即失效自然与会话状态相关,并且必须为自包含令牌显式设计。 ToolAcre 可以显示 JWT 的断言到期时间和受众,而不是注销或撤销是否实际生效。
混合设计仍然需要明确的刷新、撤销和验证者策略
混合设计可以使用有状态刷新过程的有界访问令牌,或仅在受控服务之间使用 JWT 的不透明外部凭据。这些方法是改变国家而不是废除国家。它们仍然需要安全的刷新存储、密钥轮换、撤销行为和策略测试。
该存储库没有定义通用令牌生命周期或混合配方,因此本文不提供任何内容。从测量的风险和操作约束中选择持续时间和机制,然后测试被盗令牌和注销场景,而不是依赖架构标签。
要点:无状态是一种交易,而不是升级 - 如果您选择 JWT,ToolAcre JWT 解码器会显示每个令牌在每个请求中携带的内容
无国籍是一种交易,而不是升级。服务器会话以查找为代价集中当前状态和撤销。自包含的令牌以更大的凭证、可读的声明和更明确的失效设计为代价来分发验证。
如果 JWT 适合,请使用 ToolAcre 检查安全示例并了解每个请求携带的内容。请勿将其显示视为真实性或授权的证明。仅当受信任的验证者、存储选择和撤销机制与威胁模型相匹配时,该架构才能成功。