JWT强制过期思路
在用户表中增加一个整数类型的列 JWTVersion,该列代表最后一次发放令牌的版本号。实现机制如下:
-
令牌发放流程
- 每次用户登录或发放新令牌时,将用户表中的
JWTVersion值自增,并将最新值写入 JWT 的负载(Payload)中。
- 每次用户登录或发放新令牌时,将用户表中的
-
令牌撤回机制
- 当执行禁用用户、强制撤回用户令牌等操作时,直接将该用户的
JWTVersion值自增。 - 服务器收到客户端提交的 JWT 后,从 JWT 负载中提取
JWTVersion值,并与数据库中当前用户的JWTVersion值进行比对:- 若 JWT 中的
JWTVersion小于 数据库中的值,则判定该令牌已失效(实现强制过期)。
- 若 JWT 中的
- 当执行禁用用户、强制撤回用户令牌等操作时,直接将该用户的
-
方案特点
- 状态依赖:本质上仍需在服务端保存
JWTVersion状态,但相比传统 Session 方案,存储开销极低(仅一个整数字段)。 - 优势:
- 无需维护令牌黑名单,避免存储大量无效 Token。
- 可快速实现用户级令牌批量撤回(如修改密码后立即使所有旧令牌失效)。
- 妥协性:属于 JWT 无状态特性与业务状态管理需求的平衡方案,在安全性和实现复杂度之间取得折中。
- 状态依赖:本质上仍需在服务端保存
此方案通过轻量级版本号机制,解决了 JWT 天然无状态导致的令牌撤回难题,适用于需要强制令牌失效的中小型系统。

浙公网安备 33010602011771号