JWT 由三部分组成,用点号( . )分隔:
JWT(JSON Web Token)是一种开放标准(RFC 7519),用于在网络应用环境间安全地传输信息。它是一种紧凑、自包含的方式,用于将信息作为JSON对象在各方之间进行安全传输。
核心结构
JWT 由三部分组成,用点号(`.`)分隔:
```
xxxxx.yyyyy.zzzzz
↑ ↑
Header Payload Signature
```
1. Header(头部)
包含令牌类型和签名算法:
```json
{
"alg": "HS256",
"typ": "JWT"
}
```
2. Payload(载荷)
包含声明(claims),如用户ID、权限、过期时间等:
```json
{
"sub": "user123",
"name": "John Doe",
"iat": 1516239022,
"exp": 1516242622
}
```
3. Signature(签名)
用于验证消息未被篡改,生成方式:
```
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret
)
```
主要特点
特性 说明
紧凑 体积小,可通过URL、POST参数或HTTP Header传输
自包含 载荷中包含所需所有信息,减少数据库查询
安全 可签名(HMAC/RSA)和加密(JWE)
常见应用场景
1. 认证(Authentication) — 用户登录后,服务端签发JWT,客户端后续请求携带该令牌
2. 信息交换 — 安全地在各方之间传输信息,签名确保内容未被篡改
工作流程示例
```
┌─────────┐ ┌─────────┐
│ 客户端 │ ── 1.登录请求 ───→ │ 服务端 │
│ │ ←─ 2.返回JWT ───── │ │
│ │ │ │
│ │ ── 3.请求API(带JWT) →│ │
│ │ ←─ 4.验证通过,返回数据│ │
└─────────┘ └─────────┘
```
使用注意事项
- 不要在JWT中存放敏感信息(载荷只是Base64编码,未加密)
- 设置合理的过期时间(`exp`声明)
- 使用HTTPS传输,防止令牌被截获
- 密钥安全保管,泄露密钥意味着任何人可伪造令牌
JWT 是现代Web开发中实现无状态认证的主流方案,广泛应用于微服务架构、单页应用(SPA)和移动应用后端。