JWT 鉴权机制 通俗易懂解释版本
✅ 一句话理解 JWT 鉴权机制
JWT 就像是网站发给你的一张“通行证”,你拿着它才能进入特定区域。
这个“通行证”里包含了你的身份信息,还被加密签了名,别人无法伪造。
🔐 什么是 JWT(JSON Web Token)?
JWT 是一种 用户身份验证 的方式,常用于“前后端分离”的系统中。
它长这样(实际是一串很长的字符串):
eyJhbGciOi...2ZpbnRlc3QifQ.eyJzdWIiOiIxMjM0NTYifQ.RXo9uFo...
JWT 包含三部分:
[头部].[载荷].[签名]
- 头部 Header:说明用了什么算法
- 载荷 Payload:包含用户的信息(比如 user_id, 角色)
- 签名 Signature:把前两部分用密钥加密后生成的,防止被篡改
👨🏫 打个比方:公司门禁卡(现实类比)
想象你在公司上班:
-
第一次你去前台登记,出示身份证 + 拍照 + 填资料
→ 你登录账号,输入用户名密码 -
前台发给你一张门禁卡(JWT Token)
→ 系统生成一个 JWT 给你,里面写了你的身份,比如:{"sub": "user_123","role": "admin","exp": "2025-04-17T00:00:00" }
-
你每天进公司都刷这张卡
→ 你访问接口时,在请求头里加上这个 token:Authorization: Bearer eyJhbGciOi...
-
保安扫描卡片,验证身份和是否过期
→ 后端用密钥解码 token,验证是否有效
🧪 实际开发流程
-
用户第一次登录:
- 提交用户名和密码
- 服务器验证通过,生成一个 JWT token 返回给前端
-
前端保存 token(一般放在 localStorage 或 cookie)
-
之后每次发请求,前端都在请求头加上这个 token:
GET /api/user/profile Authorization: Bearer <你的 token>
-
后端用密钥解码这个 token,验证:
- 是否有效?
- 有没有被篡改?
- 有没有过期?
- 用户是谁?
-
如果一切正常,放行;否则返回 401 未授权。
🔐 JWT 和传统 Session 的区别(简明对比)
项目 | JWT | Session |
---|---|---|
保存位置 | 前端保存 token | 后端保存 session 数据 |
状态 | 无状态(Stateless) | 有状态(需要记录) |
扩展性 | 高,适合分布式 | 低,难于扩展 |
安全性 | 被窃取就失效 | 可随时强制失效 |
示例场景 | 前后端分离项目 | 传统服务端渲染项目 |
💡 举个开发中常见的 JWT 用法例子:
# 登录时
POST /api/login
{"username": "alice","password": "123456"
}
=> 返回 token:
"eyJhbGciOi..."# 获取用户信息
GET /api/user/me
Headers:
Authorization: Bearer eyJhbGciOi...后端流程:→ 解码 token 得到用户 ID→ 查询数据库,返回用户信息
✅ 总结一张图搞懂 JWT 鉴权流程:
[用户登录] → [服务端验证密码] → [生成 JWT token] → [返回给前端][之后请求]:前端发送 token → 后端验证 token 是否有效 → 决定是否放行