news 2026/9/2 16:15:27

安全的 Token 刷新机制:Refresh Token 轮换与权限实时同步

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
安全的 Token 刷新机制:Refresh Token 轮换与权限实时同步

安全的 Token 刷新机制:Refresh Token 轮换与权限实时同步

在现代 Web 应用中,基于 JWT 的无状态认证广泛使用。然而,为了兼顾安全性和用户体验,通常采用双 Token 机制(Access Token + Refresh Token)。本文将详细阐述如何安全地实现 Refresh Token 的存储、轮换,并确保权限变更能实时生效。

一、核心原则

  • Refresh Token 以 SessionId 为唯一标识:每个会话对应一个 Refresh Token
  • Refresh Token 可重复使用:在有效期内可多次刷新 Access Token
  • Access Token 必须反映用户当前状态:刷新时应重新加载用户最新角色和权限
  • Refresh Token 应持久化存储:因其低频使用,适合存入数据库

二、Refresh Token 数据库表设计

由于 Refresh Token 使用频率低,将其存储在关系型数据库中是安全且高效的选择。以下是推荐的表结构:

CREATETABLErefresh_tokens(idBIGINTPRIMARYKEYAUTO_INCREMENT,session_idVARCHAR(128)NOTNULLUNIQUECOMMENT'会话唯一标识',user_idVARCHAR(64)NOTNULL,token_hashVARCHAR(255)NOTNULLCOMMENT'Refresh Token 的 BCrypt 哈希值',device_infoVARCHAR(500)COMMENT'设备或浏览器信息',login_channelVARCHAR(50)COMMENT'登录渠道:web/app/wechat等',ip_addressVARCHAR(45),created_atDATETIMENOTNULLDEFAULTCURRENT_TIMESTAMP,expires_atDATETIMENOTNULL,revokedBOOLEANDEFAULTFALSECOMMENT'是否已被撤销',last_used_atDATETIME,use_countINTDEFAULT0COMMENT'使用次数统计',INDEXidx_user_id(user_id),INDEXidx_session_id(session_id),INDEXidx_token_hash(token_hash),INDEXidx_expires_at(expires_at));

字段说明:

  • session_id:会话唯一标识,用于管理特定设备/浏览器的登录状态
  • login_channel:区分登录来源(Web端、App、小程序等)
  • use_count:统计 Refresh Token 被使用的次数

三、完整实现流程

1. 用户登录

  • 验证用户名/密码
  • 生成唯一session_id(UUID)
  • 生成 Access Token(含当前角色)和 Refresh Token
  • 将 Refresh Token 信息存入refresh_tokens
  • 返回 Token 对和session_id给客户端

2. 刷新 Access Token(关键步骤)

  1. 客户端发送session_id+ Refresh Token 到/auth/refresh
  2. 服务端根据session_id查询对应的 Refresh Token 记录
  3. 验证 Refresh Token 是否有效(未过期、未撤销、哈希匹配)
  4. 重新从用户服务加载用户最新信息(包括角色、启用状态等)
  5. 若用户已被禁用或删除,拒绝刷新
  6. 生成新的 Access Token(基于最新权限)
  7. 使用原有 Refresh Token(不重新生成)
  8. 更新使用次数和最后使用时间
  9. 返回新 Access Token 给客户端

3. 用户登出

  • 客户端调用/auth/logout并传入session_id
  • 服务端根据session_id将对应 Refresh Token 标记为已撤销

四、时序图:完整的 Token 刷新流程

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/2 22:25:43

如何安全迁移至PHP 8.6?揭秘企业级兼容性测试流程与工具推荐

第一章:PHP 8.6 兼容性测试概述随着 PHP 语言的持续演进,PHP 8.6 即将引入一系列新特性和底层改进。为确保现有项目在升级后仍能稳定运行,兼容性测试成为迁移过程中不可或缺的一环。该测试旨在识别当前代码库中可能受新版本影响的部分&#x…

作者头像 李华
网站建设 2026/8/31 17:12:08

90%农学研究人员忽略的R语言技巧:方差分析结果精准解读

第一章:农业产量的 R 语言方差分析在农业生产中,评估不同处理因素(如施肥方式、作物品种或灌溉策略)对产量的影响至关重要。R 语言提供了强大的统计分析工具,其中方差分析(ANOVA)是判断组间均值…

作者头像 李华
网站建设 2026/9/2 14:34:57

物联网传感器数据异常?一文掌握底层诊断与修复方法

第一章:物联网传感器数据异常?一文掌握底层诊断与修复方法物联网系统中,传感器数据异常是影响决策准确性的关键问题。数据偏差、丢包或周期性中断常源于硬件故障、通信干扰或软件逻辑缺陷。深入排查需从物理层到应用层逐级验证。识别常见异常…

作者头像 李华
网站建设 2026/9/2 22:28:12

基于模型预测控制的ACC巡航车队仿真:Matlab与CarSim的完美结合

#模型预测控制#车队#仿真#Matlab#carsim ACC巡航车队,后车根据前车行驶状况自适应计算出期望加速度,本仿真使用的是变速工况,控制方法是基于模糊逻辑控制的模型预测控制方法&#xf…

作者头像 李华
网站建设 2026/9/1 15:07:21

Qwen3-VL-8B与Codex对比:谁更适合中文多模态任务?

Qwen3-VL-8B与Codex对比:谁更适合中文多模态任务? 在当前AI应用快速落地的浪潮中,一个现实问题日益凸显:用户不再满足于“输入文字、返回答案”的单向交互。他们希望系统能看懂截图、理解商品图、解释图表,甚至根据一张…

作者头像 李华
网站建设 2026/9/2 3:56:22

Notepad官网下载后,搭配Seed-Coder-8B-Base实现智能编程?

Notepad 搭配 Seed-Coder-8B-Base:打造本地化智能编程环境 在开发工具日益智能化的今天,越来越多开发者开始关注一个核心问题:如何在不牺牲隐私和性能的前提下,获得接近 GitHub Copilot 的代码补全体验?答案或许比想象…

作者头像 李华