场景

多服务和移动端需要携带身份时,JWT 可以减少中心会话查询;但用户登出、权限收回后令牌仍有效,常让团队措手不及。

原理

JWT 由头、载荷和签名组成,签名保证内容未被篡改,并不负责加密。服务只凭密钥即可验证,形成无状态扩展能力;与此同时,签发后的令牌在过期前天然独立,撤销和续签需要额外状态。

设计步骤

访问令牌设置短有效期,只放最小声明;刷新令牌单独保存并支持轮换;服务验证签名算法、发行者、受众与时间;注销或高风险变更写入撤销记录;网关统一解析,但下游仍做资源授权。

权衡

短令牌窗口更安全,却增加刷新请求;黑名单恢复即时撤销,却重新引入存储与查询。把 JWT 放 Authorization 头可降低传统 Cookie 自动携带导致的 CSRF 风险,但仍要防 XSS 窃取。

实践建议

固定允许算法,绝不信任令牌自行声明的任意算法;不要存密码、隐私或频繁变化权限。密钥按 kid 轮换,时钟允许小范围偏差。浏览器存储方案需结合威胁模型选择;若业务强依赖即时会话控制,服务端 Session 往往更直接。

落地检查

上线前还应做一次桌面演练:准备正常、边界、超时、重复与恶意输入,确认系统的返回、日志和指标彼此对应;在预发布环境模拟依赖不可用、进程重启和配置回滚,验证降级路径不会放大故障。上线时采用小流量观察,提前定义停止条件与负责人。稳定后复盘真实数据,删除没有收益的复杂度,并把新发现的约束补进测试、监控和设计记录,使方案能够随业务持续演进,而不是停留在一次性评审结论。