应用场景
当用户登录状态到登出状态时,对应的JWT的令牌需要设置为失效状态,这时可以使用基于 Redis 的黑名单方案来实现JWT令牌失效。
基于 Redis 的黑名单方案
当用户需要登出系统时,将用户携带的Token进行解析,解码出JWT令牌,取出对应的 UUID 和 过期时间 ,用过期的时间减去当前的时间,计算出这个Key的过期时间,再以这两个字段拼接作为 Key 并设置好过期时间存储到 Redis 中,如果有黑客拿窃取出来的JWT令牌进行登录,只要判断这个JWT令牌是否在黑名单就可以。
实现步骤
1.获得携带的Token解析并取出JWT令牌的代码
这段代码实现了对指定 JWT 的验证和使令牌失效的操作。
- 首先,通过调用 convertToken(headerToken) 方法将传入的头部令牌 headerToken 转换成实际的 JWT 字符串 token。
- 然后,使用 HMAC256 算法和预设的密钥 key 创建一个算法实例 algorithm。
- 接下来,使用算法实例 algorithm 构建一个 JWT 验证器 jwtVerifier。这个验证器将用于验证 JWT 的有效性。
- 在 try-catch 块中,首先通过调用 jwtVerifier.verify(token) 方法对 JWT 进行验证。如果验证成功,则返回一个 DecodedJWT 对象 verify,其中包含了 JWT 的解码信息,如令牌的唯一标识符(ID)和过期时间等。
- 接着,调用 deleteToken(verify.getId(), verify.getExpiresAt()) 方法来删除指定令牌,并将其加入到黑名单中进行失效处理。这里使用了 verify 对象中的 ID 和过期时间作为参数。
- 最后,如果在验证 JWT 过程中发生了 JWTVerificationException 异常,即 JWT 验证失败