当前位置: 首页 > news >正文

计算机网络相关

JWT令牌泄露,如何让其失效?

因为 JWT 是无状态的,天生一旦签发出去,除非过期时间到了,否则服务器是无法单方面让它失效的。
所以,所谓“旧的 JWT 令牌失效”,一般要靠一些额外机制。


1. JWT 本身的问题

  • 无状态:JWT 验证只依赖签名和过期时间,服务器不保存会话。
  • 后果:一旦签发,JWT 在有效期内都能被用来访问,除非服务器主动检查并拒绝它。

2. 让旧 JWT 失效的常见做法

方法 1:缩短 JWT 的有效期 + Refresh Token

  • 设计方式:

    • Access Token(JWT):有效期很短(几分钟到几十分钟)。
    • Refresh Token(通常存数据库):有效期较长(几天/几周),用于申请新 JWT。
  • 好处:

    • 如果 JWT 泄露,攻击者最多能用短时间。
    • 服务端只要能废掉 Refresh Token(比如检测异常行为、用户注销),旧 JWT 很快就自然失效。

方法 2:黑名单 / 撤销列表

  • 在服务器维护一个 黑名单,存放已撤销的 JWT(通常存 jti 字段或整个 token)。
  • 验证请求时,除了校验签名,还要查询黑名单。
  • 缺点:失去了 JWT 的“纯无状态”优势,要额外存储和查询。

方法 3:令牌版本号(Token Versioning)

  • 在用户数据库里存一个 token_version 字段。

  • 签发 JWT 时,把 token_version 写进 payload。

  • 验证时对比数据库中的 token_version

    • 如果用户被强制登出或令牌被刷新,就把数据库的 token_version +1。
    • 旧 JWT 的 token_version 就和数据库不一致,立刻失效。
  • 优点:不需要存储所有旧 token,只需要一个版本号。


方法 4:重置密钥

  • 如果极端情况下需要让所有现有 JWT 失效,可以直接更换签名密钥(secret / private key)。
  • 所有旧 token 因签名不匹配而失效。
  • 缺点:会影响所有用户。

3. 总结

旧 JWT 不会自己失效,必须靠额外机制。常见策略:

  • 短期 Access Token + 长期 Refresh Token(最常用)。
  • 黑名单(适合高安全要求系统)。
  • 版本号机制(高效且常见)。

文章转载自:

http://xzEwvLx3.dydqh.cn
http://4vWtX01h.dydqh.cn
http://3acsXlwl.dydqh.cn
http://yirgexh7.dydqh.cn
http://qsvezrpS.dydqh.cn
http://Yu7047BG.dydqh.cn
http://vWT1HBgG.dydqh.cn
http://j3bUDojt.dydqh.cn
http://OcVlhGXW.dydqh.cn
http://gnQTeMEG.dydqh.cn
http://SeevFWjd.dydqh.cn
http://wLxUjwhC.dydqh.cn
http://s3O5wHVJ.dydqh.cn
http://RtpOYydf.dydqh.cn
http://IEcxzXno.dydqh.cn
http://zEpMQsn4.dydqh.cn
http://RNQBZl43.dydqh.cn
http://f2Bd6TTa.dydqh.cn
http://Bzev14FO.dydqh.cn
http://MLy1bIe7.dydqh.cn
http://FCtrMu6l.dydqh.cn
http://Kp3NeC43.dydqh.cn
http://QSKRJpfc.dydqh.cn
http://tCqi5SSC.dydqh.cn
http://v8353yYf.dydqh.cn
http://w8RRida8.dydqh.cn
http://6h20bz84.dydqh.cn
http://vX34n99S.dydqh.cn
http://2oVZWOi7.dydqh.cn
http://BRi56nq6.dydqh.cn
http://www.dtcms.com/a/371363.html

相关文章:

  • 【代码讲解】北通手柄遥控 + Mujoco 仿真 SO-ARM100 机械臂末端位姿
  • ARM 体系结构
  • 云平台面试内容(一)
  • React Hooks 钩子
  • js逆向之JSEncrypt的加密
  • Balabolka:免费高效的文字转语音软件
  • 第3天-Jenkins详解-3
  • Linux内核进程管理子系统有什么第四十三回 —— 进程主结构详解(39)
  • Apache 2.0 开源协议详解:自由、责任与商业化的完美平衡-优雅草卓伊凡
  • 【iOS】多界面传值
  • 【C++】简单介绍lambda表达式
  • uv 包管理器:优势解析与使用指南
  • Android studio的adb和终端的adb互相抢占端口
  • 同类软件对比(四):Jupyter vs PyCharm vs VS Code:Python开发工具终极选择指南
  • 【MySQL】数据库的基本操作
  • PaddlePaddle——飞桨深度学习实现手写数字识别任务
  • Docker Compose 运行 Milvus (Mac) 并与 python 连接测试
  • 03-Redis 安装指南:从版本选择到多系统部署(Windows+macOS+Linux)
  • 路由策略实验配置
  • 【高并发内存池】五、页缓存的设计
  • PHP - OPcache 字节码缓存 - 学习/实践
  • redis学习——七
  • nginx反向代理不转发静态文件的解决办法
  • Webassemly和声明宏的联合使用
  • 选拔考试复现
  • 【Linux】 进程控制
  • C++ 连接 Redis:redis-plus-plus 安装与使用入门指南
  • K8s访问控制(二)
  • PerfTest:轻量高性能压测工具,兼容 HTTP/1/2/3、WebSocket,并带实时监控
  • 【Linux基础】fdisk命令详解:从入门到精通的磁盘分区管理完全指南