我需要验证jwt吗?

Do I need to verify jwt?

本文关键字:jwt 验证      更新时间:2023-09-26

所以这是我的场景,我生成了一个jwt令牌并将该令牌存储在具有1小时TTL的redis中。现在我看到大多数教程都使用jwt。验证验证令牌…

我知道他们正在验证令牌是否真实

为什么我需要使用jwt.verify..为什么我不能用redis。存在以检查令牌是否可信。

大多数人都说,我们可以使用jwt的主要特性是不需要使用db来检查用户和过期。

但是在我的场景中,我不能将所有内容存储在令牌中…所以我使用redis来存储带有会话信息的令牌。

问题1. 所以我不应该在这种情况下使用jwt。2. 我可以跳过jwt.verify吗?

我是一个节点新手。

jwt可以帮助您快速检索有关调用者的信息,而无需访问数据库(redis也是一个数据库)。当使用客户端应用程序/外部服务使用的jwt时,您必须始终验证它们,以确保您是生成它们的人,并且它们没有被篡改。

JWT中存储的常用信息有用户名、真实姓名、群组等。在您的场景中,您可以使用JWT来存储保存所需信息的redis键。可能是这样的情况,你总是会点击redis来获取你想要的信息,所以jwt不会给你的情况增加很多价值,但它可能是这样的,你可以使用jwt来编写更智能的代码,只会在某些情况下点击redis。用户是否有这个权限,或者我们是否在redis中存储了关于这个用户的东西(JWT令牌中缺少redis键)

您是唯一可以评估您的场景和jwt有用性的人,但不要急于忽视它们,因为它们提供了开箱即用的良好性能/安全性改进。

假设Redis服务器是安全的,并且你自己生成JWT(就像这里的情况一样),你不需要验证它。一旦创建,将它存储在缓存中,稍后检索它,你不需要再次验证它,因为你知道它不可能在Redis缓存中被篡改。

只有在接收到第三方生成的jwt时,你才需要验证它们的真实性。

另一方面,如果你将jwt分发给你无法控制的第三方应用程序和客户端,那么你必须确保一旦你将它们重播给你,它们通过验证签名(或与Redis缓存中存储的一个进行二进制比较)和(在使用时)检查exp声明中的过期时间戳而未被篡改。

在没有任何验证的情况下,第三方可能会向您的API发送请求,并且在大多数情况下,这些请求可能会变成中间人攻击。保存服务器上生成的所有令牌的记录,然后针对每个传入请求对它们进行身份验证,这是一种良好的安全实践。