✅ 一、JWT 是什么?
JWT(JSON Web Token) 是一种用于 用户身份验证 和 信息安全传输 的令牌机制。它以 JSON 格式的数据 在客户端和服务端之间传递,通常用于用户登录后的授权。
简单说:你登录成功后,服务器发你一个"身份证"------JWT,你之后访问资源就带着它,不用每次都重新登录。
📦 二、JWT 的结构(由三部分组成)
JWT 是一个由 .
分隔的三段字符串,格式如下:
css
header.payload.signature
1️⃣ Header(头部)
说明令牌的类型和签名算法:
json
{
"alg": "HS256",
"typ": "JWT"
}
2️⃣ Payload(负载)
-
存放用户的非敏感信息,比如用户ID、用户名、角色等;
-
也可放一些标准字段如
exp
(过期时间):
json
{
"sub": "123456",
"name": "小杰",
"role": "admin",
"exp": 1710000000
}
3️⃣ Signature(签名)
是用于防篡改的签名,防止中间人修改 Payload:
scss
HMACSHA256(
base64UrlEncode(header) + "." + base64UrlEncode(payload),
secret
)
🔐 三、JWT 的核心机制
- 用户登录成功,服务器根据用户信息生成一个 JWT(签名加密);
- 客户端保存该 JWT(通常放在浏览器本地存储或前端缓存);
- 每次请求 API 时,把 JWT 放在请求头:
http
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6...
- 服务器解析 JWT,校验签名、检查是否过期,并基于其中的信息完成鉴权。
🎯 四、JWT 的典型使用场景
场景 | 说明 |
---|---|
登录认证 | 用户登录后获得令牌 |
单点登录(SSO) | 多系统共享登录状态 |
接口调用授权 | API 接口访问权限控制 |
移动端/前后端分离 | Token 代替传统 Session |
🛡️ 五、JWT 的安全建议
安全点 | 建议 |
---|---|
签名密钥保密 | secret 必须保存在服务端,不可泄露 |
不存敏感信息 | Payload 是明文可解码,不要放密码、身份证等 |
设置过期时间 | 用 exp 字段控制有效期,定期刷新 |
使用 HTTPS | 防止 Token 被中间人截获 |
加签算法选择 | 推荐 HS256 或 RSA(非对称更安全) |
🧪 六、JWT 示例(真实令牌样式)
json
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.
eyJ1c2VySWQiOjEyMywidXNlcm5hbWUiOiJ4aWFvamllIn0.
4VzV5Oxf9bAWlLS8MbhMELEzqJKAKFYsKL8TXp6nEbs
你可以把前两段(Header 和 Payload)复制到 jwt.io 查看解码效果。
📁 七、后端中如何生成 JWT?(以 Java 为例)
用 jjwt(Java JWT)库示例:
java
String jwt = Jwts.builder()
.setSubject("小杰")
.claim("role", "admin")
.setExpiration(new Date(System.currentTimeMillis() + 3600_000)) // 1小时过期
.signWith(SignatureAlgorithm.HS256, "mySecretKey")
.compact();
✅ 总结一句话
JWT 是一种无状态、跨平台的认证机制,安全、高效、前后端分离首选,但也需合理控制过期、签名、防泄露。