794 字
约 2 分钟
1
JWT 无状态身份验证入门
JWT 无状态身份验证入门
JWT,全称:
JSON Web Token
它常用于:
前后端分离
微服务
API 身份认证
核心思想:
用户登录成功后,服务器生成一个 Token,之后客户端每次请求都携带 Token,服务器验证 Token 就知道当前用户是谁。
1. 为什么叫“无状态”?
传统 Session:
用户登录
↓
服务器保存 Session
↓
客户端保存 sessionId
↓
每次请求通过 sessionId 查 Session
服务器需要保存登录状态。
JWT:
用户登录
↓
服务器生成 JWT
↓
客户端保存 JWT
↓
每次请求携带 JWT
↓
服务器直接验证 JWT
服务器不需要保存传统 Session。
所以叫:
Stateless Authentication
无状态认证
2. JWT 长什么样?
JWT 一般由三部分组成:
Header.Payload.Signature
例如:
xxxxx.yyyyy.zzzzz
其中:
Header
→ 算法等信息
Payload
→ 用户信息、过期时间等
Signature
→ 防止 Token 被篡改
Payload 可能包含:
{
"userId": 1001,
"role": "admin",
"exp": 1780000000
}
注意:
JWT 默认是编码,不是加密,不要在 Payload 中保存密码等敏感信息。
3. JWT 登录流程
用户名 + 密码
↓
登录接口
↓
验证成功
↓
生成 JWT
↓
返回客户端
之后请求:
GET /orders
Authorization:
Bearer <JWT>
服务器:
JWT
↓
验证签名
↓
检查是否过期
↓
获取 userId
↓
执行业务
4. JWT 为什么适合微服务?
假设有:
User Service
Order Service
Payment Service
客户端每次都携带 JWT:
JWT
↓
API Gateway
/ | \
↓ ↓ ↓
User Order Payment
不同服务只需要能够验证 Token,就能获取当前用户身份。
因此非常适合:
前后端分离
微服务
移动端 API
分布式系统
5. JWT 的问题
JWT 也不是没有缺点。
最大的一个问题是:
Token 发出去以后
在过期之前不好立即撤销
例如:
Access Token 有效期 30 分钟
用户退出登录后,如果 Token 已经泄露,理论上仍可能继续使用。
因此生产环境常见方案:
短期 Access Token
+
Refresh Token
或者:
Redis Token 黑名单
6. JWT 和 Session 的区别
| Session | JWT |
|---|---|
| 服务端保存状态 | 客户端携带状态 |
| 需要 Session 存储 | 通常不需要 |
| 单体项目很常见 | 前后端分离、微服务常见 |
| 容易主动失效 | 主动失效相对麻烦 |
7. 总结
JWT 可以简单理解成:
登录成功
↓
服务器签发 JWT
↓
客户端保存
↓
每次请求携带 JWT
↓
服务器验证 JWT
↓
确认用户身份
一句话总结:
JWT 无状态身份验证,就是让客户端携带一张带签名的“身份凭证”,服务器无需维护传统 Session,也能确认用户是谁。
评论
0 条
还没有评论,先写一条吧。