1. 什么是 JWT?
JWT 就像一个快递单号。
- 你登录后,系统给你生成一个"快递单号"(JWT token)。
- 你以后再访问接口,不需要每次都带身份证(用户名+密码),只要报出这个单号,系统一查就知道"哦,这个是你"。
2. JWT 长啥样?
JWT 是一个字符串,大概长这样:
aaaaa.bbbbb.ccccc
分三部分:
-
Header(头部):说明"这个快递单号是啥规则生成的"
- 比如用的
HS256
签名算法。
- 比如用的
-
Payload(负载):存放信息(像快递单上的收件人信息)
- 用户 ID、用户名、过期时间等等。
- ⚠️ 注意:这里是明文(Base64编码),谁都能看到,所以不能放密码这种敏感信息。
-
Signature(签名):防伪标记
- 系统用一个"秘密钥匙(secret key)"加密前两部分,生成一个签名。
- 就像快递单上的防伪章,别人伪造不了。
3. JWT 工作流程
举个例子:
-
用户登录
-
用户输入账号密码。
-
后端验证成功后,生成 JWT:
header
写算法信息payload
写用户 ID + 有效期signature
用 secret key 签名
-
最后拼成一个长字符串,返回给前端。
-
-
前端存储
- 前端把这个 token 存起来(一般放在
Cookie
或localStorage
)。
- 前端把这个 token 存起来(一般放在
-
访问接口
-
前端请求接口时,把 JWT 放在
Authorization: Bearer <token>
头里。 -
后端拿到 token,分三步:
- 解码 header + payload。
- 用同样的 secret key 重新算一遍签名。
- 比对签名,确认 token 没被篡改。
-
如果没过期 && 签名正确 → 请求合法,返回数据。
-
4. 为什么 JWT 好用?
- 无状态:后端不用保存 session 信息(不像传统 session 存在服务器内存里),只要有 token 就能验证。
- 可扩展:多服务共享一个 secret key,就都能验证同一个 JWT,适合分布式系统。
5. 类比总结
- 用户名+密码 = 身份证,要经常验证,很麻烦。
- Session = 饭店给你的小票,只有在这家饭店能用(后端保存 session 表)。
- JWT = 全国通用的"快递单号",谁都能查真伪,但没人能伪造。
好,我给你画一个JWT 登录 + 校验的交互流程图,这样你一看就懂啦 🚀
JWT 工作流程图
客户端(浏览器/APP) 服务器(后端API) 1. 登录请求 (账号+密码) 2. 验证账号密码是否正确 3. 生成JWT (Header+Payload+Signature) 4. 返回JWT Token 5. 前端保存JWT (Cookie/LocalStorage) 返回错误信息 alt [验证成功] [验证失败] 6. 携带JWT请求接口 (Authorization: Bearer xxx) 7. 校验Token (解码+检查签名+过期时间) 8. 返回数据 返回401未授权 alt [Token有效] [Token无效/过期] 客户端(浏览器/APP) 服务器(后端API)
能直观看到:
- JWT 在登录时生成
- 客户端保存它
- 以后请求都带着它
- 服务器只需要验证,不用存 session