我需要验证jwt吗?

时间:2015-09-27 19:29:35

标签: javascript node.js jwt

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

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

为什么我需要使用jwt.verify ..为什么我不能使用redis.exists来检查令牌是否真实..

大多数人都说,我们可以使用jwt主要功能,无需使用db来检查用户和到期日期。

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

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

我是节点新手..

3 个答案:

答案 0 :(得分:2)

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

存储在JWT中的常见信息包括用户名,真实姓名,组等。在您的方案中,您可以使用JWT存储包含所需信息的redis密钥。可能是你总是会点击redis来获取你想要的信息,所以JWT不会为你的情况增加很多价值,但可能是你可以使用JWT编写更聪明的代码在某些情况下redis例如。如果用户有这个权利,或者我们是否在redis中存储了关于此用户的内容(从JWT令牌中丢失了redis密钥)

你是唯一可以评估你的场景和JWT的用处的人,但不要急于解雇它们,因为它们提供了开箱即用的良好性能/安全性改进。

答案 1 :(得分:1)

假设Redis服务器是安全的并且您自己生成JWT(这里似乎是这种情况),您不需要验证它。创建之后,将其存储在缓存中并在以后检索它,您不需要再次验证它,因为您知道它在Redis缓存中无法被篡改。

只有在收到第三方生成的JWT时,您才需要验证它们是否真实。

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

答案 2 :(得分:0)

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