JSON Web Token(JWT)几乎成了现代 Web 身份验证的标配。不论是前后端分离的项目,还是微服务架构,JWT 都能在无状态的前提下,把用户身份安全地传递给服务端。但很多人只停留在“JWT 就是三段字符串拼起来”的印象,背后的安全机制和校验逻辑却容易忽略。
今天我们就把 JWT 拆开来,看看它到底是怎么保证“数据可信”的。
1. JWT 的三段式结构
一个典型的 JWT 看起来是这样的:
1 | xxxxx.yyyyy.zzzzz |
由三部分拼接而成:
-
Header(头部)
描述 JWT 的元信息,比如使用的签名算法。
示例:1
2
3
4{
"alg": "HS256",
"typ": "JWT"
}alg
指定签名算法,如 HS256(HMAC-SHA256)、RS256(RSA-SHA256)。typ
通常就是"JWT"
。
-
Payload(载荷)
存放业务相关的数据,通常是用户身份、权限、过期时间等。
示例:1
2
3
4
5
6{
"sub": "1234567890",
"name": "Alice",
"admin": true,
"exp": 1724832000
}sub
表示用户 ID。exp
是过期时间戳(Unix 时间)。
⚠️ 注意:Payload 里存放的数据并没有加密,只是 Base64URL 编码,任何人都能解码看到。
-
Signature(签名)
保证 Header 和 Payload 未被篡改。
签名的生成公式:1
2
3
4HMACSHA256(
base64UrlEncode(header) + "." + base64UrlEncode(payload),
secret
)如果是非对称加密(如 RS256),会用私钥签名,公钥验证。
2. 组装过程:怎么拼出一个 JWT
-
准备 Header 与 Payload:写好 JSON。
-
Base64URL 编码:把 Header、Payload 分别转成字符串,再用 Base64URL 编码。
- Base64URL 与普通 Base64 不同,它去掉了
+ / =
,换成了更适合 URL 的字符。
- Base64URL 与普通 Base64 不同,它去掉了
-
计算签名:
- 对称算法(HS256):用服务端和客户端都知道的
secret
做 HMAC。 - 非对称算法(RS256):用私钥生成签名。
- 对称算法(HS256):用服务端和客户端都知道的
-
拼接:
1
jwt = header + "." + payload + "." + signature
最终你得到的 JWT,就是一个字符串,既能放在 HTTP Header (Authorization: Bearer xxx
) 里,也能放在 Cookie、URL 参数里。
3. 验证过程:服务端如何识别真伪
当客户端带着 JWT 来请求时,服务端会:
- 拆分 JWT:按
.
分成三段。 - 解码 Header & Payload:得到算法、数据。
- 检查过期时间:如果
exp
已过期,直接拒绝。 - 重新计算签名:
- 把收到的 Header、Payload 按同样方式拼接。
- 用事先约定的
secret
或公钥重新计算签名。
- 比对签名:如果计算结果和 JWT 里的 Signature 一致,就说明数据没被改过。
换句话说,JWT 的安全性并不是靠“Payload 不可读”,而是靠“签名不可伪造”。
4. 安全机制与常见误区
JWT 的安全点
- 不可篡改:攻击者可以改 Payload,但 Signature 一定对不上。
- 灵活的算法:支持对称/非对称签名,适应不同应用场景。
- 无状态验证:服务端只要保存密钥或公钥,就能验证 JWT,无需存储会话。
⚠常见误区
- 误以为 Payload 加密了
实际上只是 Base64URL 编码,任何人都能解码。不要在 Payload 里放敏感数据(如明文密码)。 - 密钥管理不当
- HS256 模式下,
secret
一旦泄露,任何人都能伪造 JWT。 - RS256 模式要妥善保管私钥,只暴露公钥。
- HS256 模式下,
- 忽略过期时间
不设置exp
,JWT 就会无限期有效。若用户被禁用,JWT 仍可能继续生效,带来风险。 - 算法降级攻击
曾经有攻击手法:把 Header 改成"alg": "none"
,如果服务端验证逻辑写得不严谨,就可能直接放行。所以实现时一定要固定允许的算法。
5. 小结
JWT 的本质就是:
- Header:告诉你怎么验签。
- Payload:告诉你用户是谁、什么时候过期。
- Signature:保证上面两段没被人改过。
理解了这三步,你就能在项目里更安心地用 JWT。真正要注意的点,不在“怎么生成字符串”,而在密钥管理、过期控制、算法选择这些环节。