计算机网络相关

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(最常用)。
  • 黑名单(适合高安全要求系统)。
  • 版本号机制(高效且常见)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值