【问题标题】:Do I need to verify jwt?我需要验证 jwt 吗?
【发布时间】:2015-12-25 01:04:56
【问题描述】:

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

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

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

大部分人都说,我们可以使用jwt主要功能是不需要使用db来检查用户和过期..

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

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

我是一个节点新手..

【问题讨论】:

标签: javascript node.js jwt


【解决方案1】:

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

只有在接收到由 3rd 方生成的 JWT 时,您才需要验证它们的真实性。

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

【讨论】:

  • 这不是真的。验证是为了确保没有第 3 方篡改 JWT。因此,即使您生成了它,如果它超出了您的服务器(客户端浏览器、外部服务等),也必须对其进行验证。
  • 同意,但该问题并不表明它属于第 3 方
  • 最常见的用例涉及在手机或浏览器中运行的客户端应用程序。在同一基础设施中跨服务使用的 JWT 更先进,我从问题中假设他是一个 nodejs 新手,在观看教程时实现了这一点,但事实并非如此。您可能是对的,但您应该在回答中说明“令牌由第 3 方接收”而不是“由第 3 方生成”,以便所有人都清楚。跨度>
  • 虽然说这是一个不同的用例,但我已经添加了文字来描述它;谢谢
【解决方案2】:

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

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

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

【讨论】:

  • 实际上我正在使用 hapi.js 编写代理服务器。我不允许传递下游服务发送的 cookie 和会话信息,而不是那样,我需要生成一个令牌并存储与之关联的信息并将该令牌返回给移动和 Web 浏览器,所以它们不会想要处理 cookie。
  • 这里解释了我的全部要求,stackoverflow.com/questions/32638095/…
【解决方案3】:

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

【讨论】:

  • 无需存储令牌,因为 JWT 已签名,因此可以在检索时进行验证。如果您存储它们,您会遇到其他令人头疼的问题,例如保护对商店的访问并确保它不被泄露/篡改等。
  • 标志很容易被篡改。因此,我提到了最佳实践。
  • 除了已经处理的已发布漏洞之外,您是否有任何参考表明 JWT 签名可以被篡改?
  • 除非您通过 SSL 传输令牌,否则令牌很容易被篡改,例如。所以我不明白这是如何处理的,因为不是每个人都拥有 SSL,或者即使不是每个人都强制执行它。
  • 这正是需要验证的原因。不需要 SSL。如果篡改 JWT 验证将失败,这是 JWT 的核心特性。
猜你喜欢
  • 2019-04-20
  • 2018-04-30
  • 2023-03-12
  • 2019-07-13
  • 2023-04-01
  • 1970-01-01
  • 2013-05-30
  • 2018-11-28
  • 1970-01-01
相关资源
最近更新 更多