JWT(JSON Web Token)
JWT 遵循 RFC 7519 标准,是一种在网络环境中安全传输 JSON 声明的开放规范。它通过紧凑、自包含且可验证的方式,解决了传统 Session-Cookie 机制在分布式架构下的痛点。本文将从基础认知、核心结构、原理流程、算法体系、特性优劣、安全合规、工程实战、避坑指南、横向对比及进阶场景十个维度,构建完整的 JWT 知识体系。
一、基础认知层:定义与核心边界
1. 核心定义
JWT 本质上是基于 JSON 的无状态令牌规范,核心特性在于自包含与无状态。它是统称,包含 JWS(签名令牌,RFC 7515)和 JWE(加密令牌,RFC 7516)两大分支,日常开发中默认指代 JWS。
2. 诞生背景
设计初衷是为了解决传统认证机制的瓶颈:
- 分布式系统中 Session 共享复杂,水平扩展受限
- Cookie 受同源策略限制,跨域认证困难
- 移动端、小程序及 IoT 设备对 Cookie 适配性差
- 存在 CSRF 攻击、Session 劫持等安全隐患
3. 适用与不适用场景
| 核心适用场景 | 不适用场景 |
|---|---|
| 前后端分离架构的身份认证 | 需要频繁撤销令牌、强制全平台登出的场景 |
| 微服务/分布式系统的跨服务认证 | 超大量用户、权限实时动态变更的核心系统 |
| 跨域/跨机构的授权与信息交换 | 需要存储大量敏感信息的场景 |
| 移动端 APP/小程序/IoT 设备认证 | 需要精准统计在线用户、会话管理的场景 |
二、核心结构层:JWT 的标准格式与字段规范
标准 JWT(JWS)采用三段式.分隔结构,格式为 Header.Payload.Signature。每一段均采用 Base64URL 编码(URL 安全的 Base64,替换 +//、去除 = 填充)。
1. Header(头部)
描述元数据,Base64URL 编码后为第一段字符串,声明令牌类型与签名算法。
| 字段 | 必选 | 含义与规范 |
|---|---|---|
| alg | 是 | 签名/加密算法,如 HS256、RS256,none 表示无签名(生产环境绝对禁用) |
| typ | 否 | 令牌类型,固定值 JWT |
| kid | 否 | 密钥 ID,多密钥场景下用于快速匹配验签密钥 |
| cty | 否 | 内容类型,嵌套 JWT 时固定为 JWT |
示例:
{"alg":"RS256","typ":


