很多后端都“用过 token”,
但真正说清楚 什么是鉴权、两种方案差在哪、什么时候该用哪种,
其实并不多。
这篇文章用最直白的工程视角,把这件事讲清楚。
一、什么是鉴权?
鉴权不是“你是谁”,而是“你能不能干这件事”
- 登录(Authentication):你是谁
- 鉴权(Authorization):你有没有权限
大多数项目:登录 + 鉴权是两步,不是一步。
二、两种主流鉴权方案概览
三、方案一:Redis Token 鉴权(传统 / 稳妥)
1️⃣ 登录时做什么
用户登录成功
↓
生成一个 token(UUID)
↓
token → Redis
key = token
value = userId / 用户信息
示例(伪代码)
String token = UUID.randomUUID().toString();
redis.set(token, userInfo, 30分钟);
2️⃣ 前端怎么传参
Authorization: token值
或:
X-Token: token值
(格式随项目自定义)
3️⃣ 请求时鉴权逻辑
请求进来
↓
拦截器取 token
↓
查 Redis
↓
查到 = 放行
查不到 = 未登录 / 已失效
4️⃣ Redis Token 的本质
Redis 才是“权威登录态”
- token 本身没有意义
- token 只是 Redis 的一把“钥匙”
5️⃣ 优点 & 缺点
✅ 优点
- 可以 踢人
- 可以 强制失效
- 逻辑非常直观
- 适合后台管理系统
❌ 缺点
- 每个请求都查 Redis
- Redis 挂了 = 全站登录失效
- 分布式系统强依赖 Redis
四、方案二:JWT 鉴权(现在最常见)
1️⃣ 登录时做什么
用户登录成功
↓
生成 JWT
↓
直接返回给前端
不存 Redis
示例(简化版)
String token = Jwts.builder()
.setSubject(userId)
.claim("role", "ADMIN")
.setExpiration(expireTime)
.signWith(KEY)
.compact();
2️⃣ 前端怎么传参(统一规范)
Authorization: Bearer xxxxx.yyyyy.zzzzz
Bearer 是约定俗成的标准写法
3️⃣ 请求时鉴权逻辑
请求进来
↓
拦截器取 token
↓
JWT 验签 + 看过期时间
↓
合法 = 放行
4️⃣ JWT 的本质
JWT 本身就是“身份证”
- 不查 Redis
- 不查数据库
- token 自己证明自己
5️⃣ 优点 & 缺点
✅ 优点
- 性能极高(纯内存计算)
- 天然支持分布式
- 服务无状态
- 非常适合高并发接口
❌ 缺点
- 不能主动踢人
- token 发出去就管不了
- 只能等过期
五、两种方案核心对比(重点)
| 维度 | Redis Token | JWT |
|---|---|---|
| 是否查 Redis | 每次 | 不查 |
| 是否无状态 | ❌ | ✅ |
| 能否踢人 | ✅ | ❌ |
| 性能 | 中 | 高 |
| 分布式支持 | 依赖 Redis | 天然支持 |
| token 是否含信息 | ❌ | ✅ |
六、前端传参方式的本质差异
Redis Token 模式
token = 一串随机字符串
- 前端只是“拿钥匙”
- 后端靠 Redis 才知道你是谁
JWT 模式
Authorization: Bearer jwt
-
token 本身包含:
- userId
- role
- 过期时间
-
后端只负责验证真假
七、什么是“真正的鉴权”?
你只做 JWT 校验,其实只是:
登录校验
真正的鉴权是:
这个人,能不能访问这个接口
示例
@RequireRole("ADMIN")
@GetMapping("/admin/user/list")
public List<User> list() {}
拦截器逻辑:
1. 验 JWT 是否合法
2. 取出 role
3. 判断接口是否允许该角色
八、JWT + Redis(推荐的工程实践)
很多真实项目不会二选一,而是:
JWT + Redis 黑名单
思路
-
JWT 负责:
- 身份
- 过期校验
-
Redis 负责:
- 封号
- 踢人
- 单点登录
请求时逻辑
1. 验 JWT
2. 查 Redis 是否被禁用
3. 决定是否放行
九、到底该选哪种?
后台管理系统 / 政务系统
👉 Redis Token 或 JWT + Redis
- 更可控
- 更安全
- 能踢人
App / 小程序 / 高并发接口
👉 JWT
- 性能优先
- 分布式友好
十、一句话总结
Redis Token 是「我去系统里查你是谁」
JWT 是「你自己证明你是谁」登录解决的是身份
鉴权解决的是权限