JWT强制过期思路

在用户表中增加一个整数类型的列 JWTVersion,该列代表最后一次发放令牌的版本号。实现机制如下:

  1. 令牌发放流程

    • 每次用户登录或发放新令牌时,将用户表中的 JWTVersion 值自增,并将最新值写入 JWT 的负载(Payload)中。
  2. 令牌撤回机制

    • 当执行禁用用户、强制撤回用户令牌等操作时,直接将该用户的 JWTVersion 值自增。
    • 服务器收到客户端提交的 JWT 后,从 JWT 负载中提取 JWTVersion 值,并与数据库中当前用户的 JWTVersion 值进行比对:
      • 若 JWT 中的 JWTVersion 小于 数据库中的值,则判定该令牌已失效(实现强制过期)。
  3. 方案特点

    • 状态依赖:本质上仍需在服务端保存 JWTVersion 状态,但相比传统 Session 方案,存储开销极低(仅一个整数字段)。
    • 优势
      • 无需维护令牌黑名单,避免存储大量无效 Token。
      • 可快速实现用户级令牌批量撤回(如修改密码后立即使所有旧令牌失效)。
    • 妥协性:属于 JWT 无状态特性与业务状态管理需求的平衡方案,在安全性和实现复杂度之间取得折中。

此方案通过轻量级版本号机制,解决了 JWT 天然无状态导致的令牌撤回难题,适用于需要强制令牌失效的中小型系统。

posted @ 2025-03-08 21:43  原野追逐_22  阅读(33)  评论(0)    收藏  举报