Jwt要不要存Redisb

 
优点
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的格式可以自定义,需要自行解析。
所以总的来说:
  • 如果要跨域身份验证,使用jwt。它包含更丰富的信息,更安全,且规范性强,容易被其他系统识别和解析。
  • 如果是同域的身份验证,token + Redis 也是很好的选择。它更轻量,性能可能更高,且格式可以自定义。
但无论哪种方式,都建议将其放入Redis进行管理,主要有以下好处:
1. 可以设置token/jwt的有效期,实现登出功能。 2. 可以记录用户相关信息,避免每次都查询数据库。 3. 可以记录token/jwt的黑名单,加强安全性。 4. 可以实现不同设备登录限制等功能。 5. 方便扩展其他业务逻辑。
所以综上,jwt和token的使用场景有所不同,但都建议结合Redis来发挥最大作用。
性能
将JWT存储在Redis中可以提高系统性能,因为Redis是内存数据库,读写速度非常快。相比之下,JWT解密的开销相对较小,因为JWT只需要进行基于签名的解密,而不需要查询数据库或进行网络请求。因此,从性能角度来看,将JWT存储在Redis中可能比解密JWT更高效。
然而,需要注意的是,将JWT存储在Redis中可能会增加系统的复杂性和维护成本。因为需要额外的配置和管理Redis,这可能会增加系统的运维负担。同时,将JWT存储在Redis中还需要考虑数据一致性和缓存过期等问题。
因此,在选择是否将JWT存储在Redis中时,需要根据具体的业务需求和系统架构进行权衡。如果系统的性能瓶颈主要在JWT解密上,可以考虑将JWT存储在Redis中提高系统性能。如果系统的性能瓶颈主要在数据库查询上,可以考虑优化数据库查询,或者使用缓存等技术来提高查询速度。
思考
用常见的方案不会出什么大错,但是对技术实现本身缺乏思考,是不太行的
Loading...
目录
文章列表
王小扬博客
产品
Think
Git
软件开发
计算机网络
CI
DB
设计
缓存
Docker
Node
操作系统
Java
大前端
Nestjs
其他
PHP