EN
返回档案库

案例库 · 软件与 IT · 技术决策 · 2015–2026

JWT将身份信息移入签名令牌,服务器无需存储会话

一个紧凑、签名的JSON对象携带声明,服务器信任签名,无需进行会话查找。

互联网工程任务组 · Auth0

那一手

无状态API仍然需要知道调用者是谁,但会话存储迫使每个服务器查询同一个数据库或缓存,当服务扩展或位于负载均衡器之后时,这种设计会失效。

JWT通过将声明编码进一个紧凑、签名的JSON令牌解决了这个问题。注册声明如签发者、主题和过期时间是标准的;私有声明是自由形式的,因此调用者可以携带角色、ID和权限。

验证者只检查签名。如果签名有效,则声明被信任,因此跨服务认证变成了密码学检查,而不是网络往返。

为什么管用

  • 声明随令牌传输,因此无需查找即可知道调用者是谁。
  • 签名将声明绑定到密钥,因此令牌无法伪造或篡改。
  • 由于它只是一个HTTP头,同一个令牌可以在微服务和浏览器中工作。
值了多少签署声明,去掉会话存储聪明

可以搬走什么

如果每个服务都必须信任同一个用户,那么将事实放入每个服务都能验证的签名令牌中,而不是共享会话存储,因为后者会成为瓶颈和单点故障。

后来呢

JWT成为OAuth 2.0和OpenID Connect的默认承载格式,几乎所有API框架都在使用。无状态带来了权衡:令牌在过期前一直有效,因此撤销需要短生命周期或黑名单,生态系统通过令牌轮换和jti撤销列表解决了这个问题。

资料来源

发现哪里写错了?告诉我们。

同一路聪明