Redis在jwt中作用小结

 更新时间:2026年03月16日 09:29:45   作者:哈里谢顿  
本文主要介绍了Redis在jwt中作用小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

Redis 在上述认证流程中主要扮演状态管理者和性能加速器的角色,弥补了 JWT 无状态特性的不足。以下是具体作用:

核心作用:解决 JWT 的"不可撤销"问题

JWT 一旦签发,在过期前无法主动失效(这是无状态的双刃剑)。Redis 通过存储关键状态,实现了有状态的控制能力:

传统 JWT:签发 ──► 过期前一直有效(即使用户登出)
JWT + Redis:签发 ──► Redis 标记失效 ──► 即时作废

具体应用场景

Token 黑名单(登出失效)

场景 实现方式 Redis 数据结构 用户主动登出 将 Token 的 jti(唯一ID)存入 Redis,设置过期时间为 Token 剩余有效期 SET blacklist:{jti} 1 EX {remaining_ttl} 后台强制下线 同上,或存储用户级标记 SET user:{id}:force_logout 1

# 登出时加入黑名单
def logout(token_jti, exp_timestamp):
    ttl = exp_timestamp - current_time()
    redis.setex(f"blacklist:{token_jti}", ttl, "revoked")

# 验证时检查
def is_token_valid(token_jti):
    return not redis.exists(f"blacklist:{token_jti}")

多端登录控制

限制同一账号同时登录设备数(如 QQ/微信的"已在其他设备登录"):

# 登录时记录设备
redis.lpush(f"user:{user_id}:sessions", token_jti)
redis.ltrim(f"user:{user_id}:sessions", 0, 2)  # 只保留最近3个

# 验证时检查当前 Token 是否在列表中
valid_tokens = redis.lrange(f"user:{user_id}:sessions", 0, -1)
if token_jti not in valid_tokens:
    raise Exception("账号已在其他设备登录")

Refresh Token 存储

Access Token 短期有效(15分钟),Refresh Token 长期有效(7天),但需可撤销:

# 存储 Refresh Token 与用户绑定
redis.setex(
    f"refresh:{user_id}:{device_id}", 
    7*24*3600,  # 7天过期
    hash(refresh_token)  # 存储哈希值防泄露
)

# 刷新时验证
stored_hash = redis.get(f"refresh:{user_id}:{device_id}")
if stored_hash != hash(incoming_refresh_token):
    raise Exception("Refresh Token 无效或已轮换")

速率限制与安全防护

# 登录失败计数(防暴力破解)
key = f"login_attempts:{ip}"
attempts = redis.incr(key)
if attempts == 1:
    redis.expire(key, 3600)  # 1小时窗口
if attempts > 5:
    raise Exception("尝试次数过多,请稍后再试")

# Token 使用频率限制(防 Token 泄露后被滥用)
redis.zadd(f"token:{jti}:requests", {current_time(): current_time()})
# 清理1分钟前的记录
redis.zremrangebyscore(f"token:{jti}:requests", 0, current_time()-60)
if redis.zcard(f"token:{jti}:requests") > 100:
    # 1分钟内请求超过100次,可能泄露,加入黑名单
    redis.setex(f"blacklist:{jti}", 3600, "suspected_leak")

架构对比

方案 优点 缺点 适用场景 纯 JWT 完全无状态,扩展性强 无法强制失效,难以追踪 内部服务、短期令牌 JWT + Redis 黑名单 可撤销,保留无状态优势 每次验证需查 Redis 常规 Web 应用 纯 Redis Session 完全可控,可实时强制下线 有状态,扩展需共享 Session 高安全要求(金融)

关键设计原则

  1. 最小化存储:Redis 只存必要的状态标记(如黑名单),不存完整的用户数据
  2. TTL 对齐:Redis 键的过期时间严格对齐 JWT 的 exp 时间,避免永久堆积
  3. 异步清理:黑名单过期后自动删除,无需人工维护

本质:Redis 让 JWT 从"完全不可控"变为"可控的无状态",在架构简洁性和业务需求间取得平衡。

到此这篇关于Redis在jwt中作用小结的文章就介绍到这了,更多相关Redis jwt作用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Redis实现库存扣减的示例代码

    Redis实现库存扣减的示例代码

    在日常开发中有很多地方都有类似扣减库存的操作,本文主要介绍了Redis实现库存扣减的示例代码,具有一定的参考价值,感兴趣的可以了解一下
    2023-07-07
  • linux服务器中搭建redis6.0.7集群

    linux服务器中搭建redis6.0.7集群

    这篇文章主要介绍了linux服务器中搭建redis6.0.7集群的相关资料,需要的朋友可以参考下
    2022-11-11
  • Redisson分布式限流器RRateLimiter的使用及原理小结

    Redisson分布式限流器RRateLimiter的使用及原理小结

    本文主要介绍了Redisson分布式限流器RRateLimiter的使用及原理小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-06-06
  • Redis Cluster 集群搭建你会吗

    Redis Cluster 集群搭建你会吗

    这篇文章主要介绍了Redis Cluster 集群搭建过程,本文分步骤通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-08-08
  • Redis的五种基本类型和业务场景和使用方式

    Redis的五种基本类型和业务场景和使用方式

    Redis是一种高性能的键值存储数据库,支持多种数据结构如字符串、列表、集合、哈希表和有序集合等,它提供丰富的API和持久化功能,适用于缓存、消息队列、排行榜等多种场景,Redis能够实现高速读写操作,尤其适合需要快速响应的应用
    2024-10-10
  • Redis序列化存储及日期格式的问题处理

    Redis序列化存储及日期格式的问题处理

    这篇文章主要介绍了Redis序列化存储及其日期格式的问题处理方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • Redis中主键失效的原理及实现机制剖析

    Redis中主键失效的原理及实现机制剖析

    这篇文章主要介绍了Redis中主键失效的原理及实现机制剖析,本文讲解了失效时间的控制、失效的内部实现、Memcached 删除失效主键的方法与 Redis 有何异同、Redis 的主键失效机制会不会影响系统性能等内容,需要的朋友可以参考下
    2015-06-06
  • 通过Redisson监听Redis集群的Key过期事件的实现指南

    通过Redisson监听Redis集群的Key过期事件的实现指南

    在分布式系统中,监听 Redis 键过期事件是实现缓存失效、订单超时取消等功能的常用方案,本文将详细介绍如何通过 Redisson 高效监听 Redis 集群的 Key 过期事件,需要的朋友可以参考下
    2025-11-11
  • Redis实现持久化的方式汇总

    Redis实现持久化的方式汇总

    Redis是一种高级key-value数据库。它跟memcached类似,不过数据可以持久化,而且支持的数据类型很丰富。今天我们就来看看如何实现Redis持久化,需要的朋友可以参考下
    2022-10-10
  • redis使用Lua脚本解决多线程下的超卖问题及原因解析

    redis使用Lua脚本解决多线程下的超卖问题及原因解析

    这篇文章主要介绍了redis使用Lua脚本解决多线程下的超卖问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-05-05

最新评论