讲师中心 微信公众号
AI工具推荐 视频效率加速

TP8.0 基于 JWT 的 Refresh Token 无感续期策略【双Token】

冬杰小哥_9393

冬杰小哥_9393

发布时间:2026-07-10 15:52:06

|

674人浏览过

|

来源于php中文网

原创

必须实现双Token静默续期:服务端签发隔离密钥的access_token(15分钟)和refresh_token(7天),前者存body后者设HttpOnly Cookie;中间件捕获401并自动刷新,前端Axios拦截重试,配合Redis黑名单、device_hash校验及预刷新机制保障安全无感。

tp8.0 基于 jwt 的 refresh token 无感续期策略【双token】

用户在 ThinkPHP 8.0 项目中调用接口时突然收到 401 错误,页面卡住、表单未提交成功、支付流程中断——这不是要重新登录,而是 access_token 已过期但前端没感知,后端又没提供静默续期能力;必须让 refresh_token 在后台自动换新 token 并重发原请求,整个过程用户完全无感。

服务端生成双 Token 对(access + refresh)

登录成功后,服务端需一次性签发两个 JWT:短时效的 access_token(如 15 分钟)用于日常接口鉴权,长时效的 refresh_token(如 7 天)专用于续期,且二者密钥必须隔离。

使用 firebase/php-jwt 库生成,【务必禁用 alg=none 攻击路径】:JWT::decode() 第三个参数只能传 ['HS256'],不可留空或传入全算法数组。

access_token 的 payload 中必须包含 exp(Unix 时间戳)、iat、jti(随机 16 字节 hex),jti 同步写入 Redis,TTL 设为略长于 access_token 有效期(如 930 秒)。

refresh_token 单独生成 payload,含 exp、user_id、device_hash(SHA256(User-Agent + IP)),用独立密钥 REFRESH_SECRET 签名,不塞权限字段。

最终返回 JSON 中,access_token 放 body,refresh_token 必须设为 HttpOnly; Secure; SameSite=Strict 的 Cookie,禁止 JS 读取。

TP8.0 中间件拦截 401 并触发静默续期

在 app/middleware/TokenRefresh.php 中定义中间件,仅对带 Authorization: Bearer xxx 的请求生效。

捕获响应状态码为 401 且响应头含 X-Token-Expired: true 时,中断当前响应流,改走续期逻辑。

从 Cookie 中安全读取 refresh_token → 校验签名与 exp → 查询 Redis 确认 jti 未被标记为已用 → 验证 device_hash 是否匹配当前请求指纹。

ThinkPHP5.1企业站点快速开发-源码课件
ThinkPHP5.1企业站点快速开发-源码课件

ThinkPHP5.1企业站点快速开发

下载

全部通过后,生成一对新 token → 将新 access_token 返回至响应 body → 【用 Set-Cookie 覆盖旧 refresh_token,Max-Age 必须重置】 → 原请求上下文暂存至 TP 的 Request::with() 中供后续复用。

前端 Axios 拦截器配合实现无感重发

方法一:响应拦截器中识别 401 + X-Token-Expired 头 → 阻断 Promise 链 → 触发刷新请求(POST /api/auth/refresh,不带 Authorization,依赖 Cookie 自动携带)。

方法二:刷新成功后,用新 access_token 替换 localStorage 或内存中的旧值 → 将被拦截的原始请求 clone 一份 → 修改其 Authorization header → 发起重试。

注意:重试前必须清空原请求的 FormData 或 JSON body 缓存,否则可能因重复提交导致业务异常(如重复下单)。

所有重试请求需加 X-Retry: true 请求头,后端据此跳过二次续期逻辑,避免嵌套循环。

关键安全加固步骤

第一步:refresh_token 每次使用后,立即将其 jti 写入 Redis 黑名单,TTL = access_token 有效期 + 30 秒,防止重放攻击。

第二步:access_token 过期前 2 分钟内,前端主动发起预刷新(不阻塞 UI),降低高并发下 token 雪崩概率。

第三步:服务端校验 refresh_token 时,强制比对 device_hash,若不匹配则拒绝刷新并清空该用户所有 refresh_token 记录。

第四步:TP8.0 的 JwtAuth 验证器中,access_token 解析失败时,不得返回详细错误信息(如 “Signature has expired”),统一返回 401,避免暴露过期时间。

相关文章

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

Lovart
Lovart Hot

一款面向视觉设计创作的AI设计平台,可通过智能体和画布工作流辅助制作海报、Logo、网页、PPT及其他视觉内容。

VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

相关专题

更多
登录token无效
登录token无效

登录token无效解决方法:1、检查token的有效期限,如果token已经过期,需要重新获取一个新的token;2、检查token的签名,如果签名不正确,需要重新获取一个新的token;3、检查密钥的正确性,如果密钥不正确,需要重新获取一个新的token;4、使用HTTPS协议传输token,建议使用HTTPS协议进行传输 ;5、使用双因素认证,双因素认证可以提高账户的安全性。

13726

2023.09.14

登录token无效怎么办
登录token无效怎么办

登录token无效的解决办法有检查Token是否过期、检查Token是否正确、检查Token是否被篡改、检查Token是否与用户匹配、清除缓存或Cookie、检查网络连接和服务器状态、重新登录或请求新的Token、联系技术支持或开发人员等。本专题为大家提供token相关的文章、下载、课程内容,供大家免费下载体验。

1625

2023.09.14

token怎么获取
token怎么获取

获取token值的方法:1、小程序调用“wx.login()”获取 临时登录凭证code,并回传到开发者服务器;2、开发者服务器以code换取,用户唯一标识openid和会话密钥“session_key”。想了解更详细的内容,可以阅读本专题下面的文章。

3757

2023.12.21

token什么意思
token什么意思

token是一种用于表示用户权限、记录交易信息、支付虚拟货币的数字货币。可以用来在特定的网络上进行交易,用来购买或出售特定的虚拟货币,也可以用来支付特定的服务费用。想了解更多token什么意思的相关内容可以访问本专题下面的文章。

5921

2024.03.01

OpenJDK JVM参数怎么调优
OpenJDK JVM参数怎么调优

Java应用运行缓慢,如何调整JVM参数?本专题介绍OpenJDK JVM性能调优的基本流程,涵盖性能指标确认、运行数据采集、内存配置和垃圾回收分析,帮助你先定位瓶颈,再通过对照测试验证效果,避免直接套用参数而影响应用稳定性。

60

2026.10.16

OpenJDK怎么配置Java开发环境
OpenJDK怎么配置Java开发环境

怎样用OpenJDK搭建开发环境?本专题介绍版本选择、下载安装、环境变量配置和编译运行验证,帮助你理清JDK的作用及基本配置流程,并通过简单程序检查环境是否可用,为后续项目开发做好准备。

40

2026.10.16

OpenJDK怎么部署Java应用
OpenJDK怎么部署Java应用

Java项目开发完成后,怎样部署到目标环境并正常运行?本专题介绍OpenJDK应用部署流程,涵盖运行环境准备、版本兼容检查、应用打包、启动参数配置和日志查看,帮助你理清部署前后的操作顺序,减少环境差异造成的运行问题。

40

2026.10.16

Revel框架模板渲染与表单验证
Revel框架模板渲染与表单验证

本专题围绕Revel框架视图层开发,介绍模板语法、变量输出、布局复用、表单提交、参数绑定与验证规则,帮助开发者完成安全规范的页面交互。

20

2026.10.16

Revel框架MVC路由与控制器
Revel框架MVC路由与控制器

本专题聚焦Revel框架MVC核心机制,讲解路由定义、控制器Action、参数绑定、请求响应和反向路由,并结合常见场景梳理接口请求处理流程。

20

2026.10.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn