案例库 · 软件与 IT · 技术决策 · 2010-2015
JWT 将声明放入签名令牌中,因此服务器无需会话存储即可验证
JWT 将声明打包成一个紧凑的、URL 安全的签名令牌,使得 API 无需服务器端会话即可信任用户。
Auth0
那一手
用户登录时,服务器通常生成会话 ID 并将用户信息存储在表中;每次请求都会查询该表。这在单机环境下可行,但对于无状态的 API 服务器集群,如果没有缓存或粘性会话,就无法共享内存中的表。
JWT 将用户的声明直接放入令牌本身。令牌是一个紧凑的、URL 安全的 JSON 载荷,经过签名,无法伪造。服务器校验签名后直接从令牌中读取声明。
结果就是无状态认证:任何知道公钥的服务器都可以验证任何用户,无需共享的会话存储。声明和证明一起传输,这正是 JWT 成为 API 认证和单点登录默认方案的原因。
为什么管用
- 因为令牌自包含,验证者无需数据库调用,请求路径保持简单快速。
- 签名而非会话是信任的锚点,因此任何拥有密钥的无状态服务器都可以验证任何令牌。
- 其头部.载荷.签名的三段式结构在 Web 生态的各种语言中都很容易实现。
- 它与 OAuth 和 OpenID Connect 兼容,因此同一个令牌可以在多个服务和产品中使用。
值了多少将声明放入令牌中;签名即是证明。聪明
可以搬走什么
如果证明与声明一起传输,就可以在任何地方验证,并水平扩展验证器,因为身份变成自包含的,而不是查找。
后来呢
JWT 于 2015 年 5 月标准化为 RFC 7519,并包含 JWS/JWE 家族。它成为单页应用认证、API 网关和微服务的默认方案。其已知弱点是撤销问题(在到期前无法使令牌失效,除非使用黑名单)以及算法混淆漏洞,还有比不透明会话更大的体积开销。
资料来源
发现哪里写错了?告诉我们。