一文搞懂「鉴权」:JWT 鉴权 vs Redis Token 鉴权(附前端传参对比)

7 阅读3分钟

很多后端都“用过 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 TokenJWT
是否查 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 是「你自己证明你是谁」

登录解决的是身份
鉴权解决的是权限