安全的 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 刷新流程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1020121.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

护眼灯排名前十的品牌有哪些?年度权威榜单出炉,护眼效果超强!

现在越来越多家长给孩子买护眼台灯了,但现在有不少“伪护眼”产品充斥市场,这些伪护眼灯存在蓝光过多、光线不均和色彩失真等问题,可能会让孩子眼睛感到疲劳,从而影响到视力健康。那究竟护眼灯排名前十的品牌有哪些?为…

kanass全面介绍(11) - 如何进行迭代管理

kanass是一款国产开源免费、简洁易用的项目管理工具,包含项目管理、项目集管理、事项管理、版本管理、迭代管理、计划管理等相关模块。工具功能完善,用户界面友好,操作流畅。本文主要介绍迭代管理。1、添加迭代进入项目->迭代->添加迭代…

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

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

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

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

sward全面介绍(10) - 如何做好文档评审

知识库不是文件的堆积,而是组织的核心资产。不仅要避免因为文档错误而导致项目出现问题,还要减少后续的维护成本,让知识库真正成为团队资产而不是负担。文档评审是守护这份资产质量的“守门员”。1、开启评审创建知识库时(以公共知…

多模态缓存清理全解析,Laravel 13开发者必须掌握的3种高阶技巧

第一章:多模态缓存清理的核心概念与Laravel 13演进在现代Web应用开发中,缓存机制已成为提升系统性能的关键手段。随着Laravel 13的发布,框架对多模态缓存管理进行了深度优化,支持同时操作多种缓存后端(如Redis、Memcac…

软件开发全流程注意事项:避坑指南与效率提升

软件开发是一个涉及需求、设计、编码、测试、部署等多环节的复杂过程,任何一个环节的疏漏都可能导致项目延期、成本超支甚至产品失败。以下从全流程关键节点出发,整理核心注意事项,帮助开发团队规避风险、保障项目质量。一、需求阶段&#xf…

杰理之获取返回的当前时间与实际播放的音频时间并不一致【篇】

现象:快进步进3s 后,获取到的是快进3s 后的时间,但是实际快进了的时间大于3s ,所以导致实际播放当前的时间与用接口返回的时间不相符。

创业团队用 XinServer 提升项目交付效率实战

创业团队用 XinServer 提升项目交付效率实战 最近好几个做外包的朋友跟我吐槽,说现在接个管理系统或者小程序的单子,最头疼的不是前端页面有多炫,而是后端那堆破事儿。数据库怎么设计?API接口谁来写?用户权限怎么管理&…

从传感器到图表:PHP实现农业数据实时可视化的5个关键步骤

第一章:从传感器到图表的农业数据可视化概述现代农业正逐步迈向数字化与智能化,其中数据可视化在农业生产决策中扮演着关键角色。通过部署环境传感器采集温度、湿度、土壤水分等关键参数,原始数据被转化为直观的图表,帮助农户实时…

一文详解Java中死锁产生原因、常见场景及排查解决思路(附详细案例代码)

01-死锁的概念 死锁是指两个或两个以上的线程在执行过程中,因抢夺资源而造成的一种互相等待的现象,若无外力干涉,则它们无法再继续推进下去 02-产生原因 系统资源不足进程运行推进顺序不合适系统资源分配不当 03-常见死锁场景与示例 3.1 嵌…

开放土壤光谱库:建立可复制的土壤校准模型(PLOS ONE,2025)

1 研究背景与目的 1.1 土壤光谱学应用现状 土壤光谱学(基于漫反射光谱 DRS)是估算土壤性质的快速、低成本方法,广泛用于农业和环境监测。其核心依赖土壤光谱库(SSLs)作为机器学习模型的训练数据,但现有 SSL…

在前端中list.map的用法

在前端(JavaScript)中,Array.prototype.map() 是数组的核心高阶方法,用于遍历数组并返回一个新数组—— 新数组的每个元素是原数组元素经过指定回调函数处理后的结果。它不会修改原数组,是纯函数式编程的常用工具&…

【Dubbo从入门到精通:架构解析与实战落地】

在分布式系统架构中,服务治理是核心难题之一。Apache Dubbo(以下简称Dubbo)作为一款高性能、轻量级的开源服务框架,凭借其完善的服务治理能力,成为Java生态中分布式服务开发的首选方案。本文将从Dubbo的基础概念出发&a…

Geo优化【双核四驱】驱动企业增长:权威专家于磊深度解析

Geo优化(Generative Engine Optimization, GEO)已成为AI时代企业数字营销的战略高地。随着大语言模型驱动的生成式搜索逐渐取代传统的链接聚合模式,企业与用户之间的信息触达逻辑正在发生根本性变革。中国信通院在2024年第四季度的报告中指出…

6G真的要来了?中国移动这次把“未来网络”摆到了台前

很多人对6G的印象,可能还停留在“5G都没用明白,6G是不是太早了”。但在12月中旬的中国信息通信大会上,中国移动把答案摆得很直白——不是概念图,也不是口号,而是一份白皮书,加上一台已经能跑起来的原型样机…

Yandex复杂还原验证码识别

注意,本文只提供学习的思路,严禁违反法律以及破坏信息系统等行为,本文只提供思路 如有侵犯,请联系作者下架 本文识别已同步上线至OCR识别网站 yandex滑动还原验证码: http://yxlocr.nat300.top/ocr/other/34 yandex基本上已经切换了验证码,每次滑动会自动交换拼图,只有…

sward全面介绍(11) - 如何有效保障文档的安全可靠

sward是一款国产开源免费知识库管理工具,工具支持一键安装零配置,页面设计简洁易用。本文将介绍sward如何通过多重机制有效保障文档的安全可靠。1、知识库可见范围创建知识库时,可以选择可见范围公共或者私密。公共:系统全部成员可…

Google Vids:由AI驱动的工作视频创作 | ProductHunt 今日热榜 - 12月15日

今日榜单登顶产品Google Vids 以 352 票登顶今日热榜!这是一款融入 Workspace 生态的 AI 视频创作工具,旨在让不懂剪辑的用户也能快速制作专业工作视频。本期亮点产品介绍本期 Product Hunt 热榜呈现“AI 落地,工具先行”的鲜明特点。AI 正从…

【专家亲授】低代码环境下PHP组件动态更新的8个最佳实践

第一章:低代码环境下PHP组件更新的核心挑战在低代码平台日益普及的背景下,PHP作为后端服务的重要组成部分,其组件更新面临着前所未有的复杂性。尽管低代码环境强调可视化开发与快速部署,但底层逻辑仍依赖于传统编程语言的稳定性与…