杨斌
发布于 2026-04-09 / 3 阅读
0
0

JWT技术原理

在 Java 项目(比如 Spring Boot + Vue)中使用 JWT(JSON Web Token),本质是用一种“无状态的身份认证机制”来替代传统的 Session 登录。


一、JWT 的好处(为什么越来越多人用)

1️⃣ 无状态(核心优势)

传统登录:

  • 用户登录 → 服务端存 Session → Redis / 内存保存

  • 每次请求都要查 Session

JWT:

  • 登录成功 → 服务端直接返回一个 token

  • 后续请求 → 客户端带 token,服务端不存任何登录状态

👉 好处:

  • 不用 Redis 存 Session

  • 服务可以随便扩容(天然支持分布式)


2️⃣ 天然适合前后端分离(你现在用 Vue3 就很适合)

流程非常简单:

前端(Vue)
   ↓ 登录
后端(SpringBoot)→ 返回 JWT
   ↓
前端存 token(localStorage)
   ↓
每次请求带 token(Authorization)

👉 好处:

  • 不依赖 Cookie(避免跨域问题)

  • 前端控制更灵活


3️⃣ 跨服务 / 微服务支持很好

在微服务架构中:

  • A 服务发 token

  • B / C / D 服务都能验证

👉 不需要共享 Session


4️⃣ 性能更高(减少 IO)

传统:

  • 每次请求查 Redis / DB

JWT:

  • 只做一次 签名校验(内存计算)

👉 CPU 换 IO,通常更快


5️⃣ 安全性可控(可扩展)

JWT 可以:

  • 设置过期时间(exp)

  • 加自定义信息(用户ID、角色)


二、JWT 的原理(重点)

JWT 本质就是一个字符串:

xxxxx.yyyyy.zzzzz

分为三部分:


1️⃣ Header(头部)

说明:

  • 类型(JWT)

  • 签名算法(如 HS256)

示例:

{
  "alg": "HS256",
  "typ": "JWT"
}

2️⃣ Payload(载荷)

存放用户信息(但不是加密的!只是 Base64 编码)

{
  "userId": 1001,
  "username": "yang",
  "exp": 1710000000
}

👉 注意:

  • 不要放密码!

  • 任何人都能解码看到


3️⃣ Signature(签名)

核心安全点:

签名 = HMACSHA256(
    base64(header) + "." + base64(payload),
    secret
)

👉 用服务端的 secret密钥生成


三、完整认证流程(你要重点理解)

登录时:

1. 用户输入账号密码
2. 后端校验成功
3. 生成 JWT(包含 userId)
4. 返回给前端

请求时:

前端请求:
Authorization: Bearer xxx.jwt.token

后端处理:

1. 拿到 token
2. 校验签名(防篡改)
3. 校验过期时间
4. 解析 userId
5. 放行请求

四、JWT vs Session

对比项

Session

JWT

是否存储

服务端存

客户端存

扩展性

差(要共享)

性能

需要查缓存

本地校验

跨域

麻烦

简单

安全

可控

易被盗用


五、JWT 的缺点

❗1. 无法主动失效(最大问题)

  • token 一旦发出去

  • 服务端没法“立刻让它失效”

👉 解决:

  • 短有效期 + 刷新 token

  • 或维护黑名单(Redis)


❗2. token 被盗 = 直接登录

👉 所以必须:

  • HTTPS

  • 不存敏感信息

  • 设置过期时间


❗3. token 体积较大

比 sessionId 大很多


❗4. 登录状态下失效

token如果过期,即使在已登录状态下,也有可能失效,业内做法是双token,1个短期token(30分钟),1个长期刷新token(7天)。

流程如下:

登录

accessToken + refreshToken

请求接口

accessToken过期 ❗

用refreshToken换新token

继续访问

六、总结一句话(你可以记住这个)

👉 JWT 本质是:

用“签名”替代“存储”,实现无状态登录


七、结合你当前技术栈(重点建议)

你是:

  • Java(SpringBoot 2.7.6)

  • Vue3

👉 最推荐方案:

JWT + Spring Security + Redis(可选)

结构:

  • JWT:认证

  • Redis:黑名单 / 刷新token

  • Spring Security:拦截器


评论