优点

JWT(JSON Web Token)是一种轻量级的认证和授权方案,通常用于无状态的应用场景。将JWT放入Redis的原因主要有以下几点:

  1. 撤销和失效:JWT本身无法主动撤销,因为它是无状态的。将JWT放入Redis可以使得我们能够实现主动撤销和控制其生命周期。当我们需要使一个JWT失效时,只需将其从Redis中删除即可。
  2. 续期和过期:JWT本身包含过期时间,但是如果我们想要在用户活跃期间自动续期,将JWT存储在Redis中可以达到这个目的。我们可以根据用户的活动来更新Redis中JWT的过期时间,从而实现自动续期。
  3. 缩短JWT长度:JWT通常包含较多的信息,导致其长度较长。将JWT存储在Redis中可以使我们只需在JWT中存储一个唯一标识(例如用户ID或会话ID),然后将其他信息存储在Redis中。这样,JWT的长度可以大大减小,减轻传输和存储的负担。
  4. 集群支持:在分布式系统或微服务架构中,将JWT存储在Redis中有助于实现跨服务的认证和授权。通过Redis共享JWT,各个服务可以更容易地实现统一的权限管理。
  5. 防止重入、支持撤销、并发性能要比jwt解析搞,减少jwt长度,续期

需要注意的是,将JWT放入Redis会引入一定的复杂性和性能开销。在实际应用中,需要根据具体的业务场景和需求来权衡是否使用Redis来存储JWT。

缺点

复杂性

增加多的开销

网络ioredis比jwt解密要满

  1. 依赖Redis。会增加系统的依赖,需要运行和维护Redis服务。
  2. 占用Redis存储空间。每个JWT都需要占用Redis的key,如果JWT数量多会影响Redis的性能。
  3. 单点故障。如果 Redis 宕机,会导致整个 JWT 认证服务瘫痪。
  4. 安全性。如果Redis被攻击,存储在Redis中的JWT也会泄露。
  5. 复杂性增加。系统整体变得更复杂,增加了一个 Redis 组件。
  6. 扩容困难。如果JWT数量剧增,Redis可能不足以支撑,扩容变得困难。

jwt放入redis和token放入redis区别

jwt和token放入redis的区别主要有以下几点:

  1. jwt是自包含的,包含了用户的相关信息和签名,可以独立验证。token通常只包含一个字符串,需要查 Redis 来获取更多信息。
  2. jwt的签名可以防止篡改,而普通token没有这个机制,更容易被修改。
  3. jwt的载荷和签名使其可以验证用户信息而无需查询数据库,这可以提高效率。而token需要查询Redis来获取用户信息。
  4. jwt一般用于跨域身份验证,而token更适用于同域的身份验证。
  5. jwt的规范性更强, parse 和验证jwt的库很多。而token的格式可以自定义,需要自行解析。

所以总的来说:

但无论哪种方式,都建议将其放入Redis进行管理,主要有以下好处:

  1. 可以设置token/jwt的有效期,实现登出功能。
  2. 可以记录用户相关信息,避免每次都查询数据库。
  3. 可以记录token/jwt的黑名单,加强安全性。
  4. 可以实现不同设备登录限制等功能。
  5. 方便扩展其他业务逻辑。

所以综上,jwt和token的使用场景有所不同,但都建议结合Redis来发挥最大作用。

性能