主流非 JWT 式 Access Token 方案

一、核心结论

JWT 无状态无法主动吊销 ,只能短时效;有状态 Token 可随时吊销,是企业级常用替代方案。


二、主流 Access Token 方案(非 JWT)

1. 数据库/缓存存储式 Token(最主流)

原理

  • 下发随机字符串(UUID、雪花ID、随机串)作为 AccessToken
  • 服务端存入 Redis/MySQL:token -> 用户ID、权限、过期时间、设备信息
  • 校验:请求带 token,服务端查缓存判断是否有效、是否拉黑

优点

  • 支持主动吊销(删 Redis 键即可)
  • 时效灵活,可长可短
  • 权限可动态变更
    缺点
  • 每次请求需查缓存,有网络/IO开销
    适用:后台管理、APP、小程序、电商、企业系统

2. OAuth2 标准令牌(原生非JWT)

标准 OAuth2 原生令牌就是随机字符串,不是 JWT:

  • AccessToken:随机短串(缓存存状态)
  • RefreshToken:长时效随机串
  • 主流授权平台早期均为此方案,后来才兼容 JWT

3. Session 令牌(传统服务端会话)

原理

  • Cookie 下发 SESSION_ID
  • 服务端 Session 池存储会话信息
    优点 :最简、天然可注销
    缺点:跨域、移动端适配差,多用于传统 Web 站点

4. PASETO(安全替代 JWT)

定位 :JWT 安全升级版,无状态

  • 解决 JWT 签名漏洞、载荷明文风险
  • 依旧无状态不能主动吊销,和 JWT 通病一致
  • 只能缩短有效期缓解,不能根治吊销问题

5. Macaroon 令牌(分布式/权限细粒度)

去中心化可委派令牌,支持逐层授权,多用于云服务、分布式系统,小众但专业。

6. 加密二进制令牌(自研二进制Token)

二进制序列化+对称加密,体积更小、防篡改,私有业务自研常用。


三、解决 JWT 无法吊销的工业级通用方案

即使还用 JWT,搭配这套架构即可实现吊销:

  1. AccessToken(JWT) 极短有效期:5~15分钟
  2. RefreshToken 用【有状态随机串】:存入Redis,支持注销
  3. 登出/踢人:直接拉黑 RefreshToken,用户无法续期
  4. 维护黑名单 Redis:临时拉黑未过期 JWT(短时兜底)

四、选型对比

方案 无状态 可吊销 性能 适用场景
随机串+Redis 中等 绝大多数业务首选
JWT 对外开放接口、高并发无注销场景
PASETO 追求安全无状态
SessionId 传统网页

五、最佳实践推荐

  1. 对内业务系统 / APP / 小程序
    优先:随机字符串 AccessToken + Redis 存储,自由吊销、可控性最强
  2. 对外开放 API、高并发网关
    短时效 JWT + 有状态 RefreshToken 组合架构
  3. 严禁长时效 JWT,最长不超过30分钟
相关推荐
badhope3381 天前
当所有AI都在抄同一份作业:前端模板的趋同、困局与破局
前端·ai·ai编程·前端开发·tailwind·ui设计
数据库小学妹1 天前
数据库等保三级和四级有什么区别?从访问控制到备份恢复的完整对比
数据库·安全·数据库安全·三级等保·等保合规·四级等保
光影少年1 天前
RN的Fabric 渲染流程
运维·前端·javascript·react native·react.js·fabric
__zRainy__1 天前
React开始:直接在网站中使用React.js
前端·react.js·前端框架
鹿鸣天涯1 天前
CISP认证学习笔记
安全·cisp
用户059540174461 天前
大模型长记忆评测踩坑实录:2000条错位记忆,让我排查了整整3小时
前端·css
码林鼠1 天前
webpack的基本配置
前端·webpack·node.js
用户938515635071 天前
React Router 进阶:路由守卫、登录鉴权与状态传递
前端·javascript·全栈
kyriewen1 天前
我重写了自己用了两年的防抖节流Hook——发现里面藏着3个隐藏bug
前端·javascript·面试
阿祖zu1 天前
芝士就是力量!开源私有化部署与 GitHub 双向同步的个人知识笔记 App
前端·后端·ios