JWT通俗易懂讲解

1. 什么是 JWT?

JWT 就像一个快递单号

  • 你登录后,系统给你生成一个"快递单号"(JWT token)。
  • 你以后再访问接口,不需要每次都带身份证(用户名+密码),只要报出这个单号,系统一查就知道"哦,这个是你"。

2. JWT 长啥样?

JWT 是一个字符串,大概长这样:

复制代码
aaaaa.bbbbb.ccccc

分三部分:

  1. Header(头部):说明"这个快递单号是啥规则生成的"

    • 比如用的 HS256 签名算法。
  2. Payload(负载):存放信息(像快递单上的收件人信息)

    • 用户 ID、用户名、过期时间等等。
    • ⚠️ 注意:这里是明文(Base64编码),谁都能看到,所以不能放密码这种敏感信息。
  3. Signature(签名):防伪标记

    • 系统用一个"秘密钥匙(secret key)"加密前两部分,生成一个签名。
    • 就像快递单上的防伪章,别人伪造不了。

3. JWT 工作流程

举个例子:

  1. 用户登录

    • 用户输入账号密码。

    • 后端验证成功后,生成 JWT:

      • header 写算法信息
      • payload 写用户 ID + 有效期
      • signature 用 secret key 签名
    • 最后拼成一个长字符串,返回给前端。

  2. 前端存储

    • 前端把这个 token 存起来(一般放在 CookielocalStorage)。
  3. 访问接口

    • 前端请求接口时,把 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