【问题标题】:I can't understand the JWT Authentication well我不能很好地理解 JWT 身份验证
【发布时间】:2018-01-11 21:47:48
【问题描述】:

现在很多开发者使用 JWT Authentication 来授权 api 调用。 顺便说一句,如果黑客可以捕获经过身份验证的用户的 api 调用请求,那么他就可以获得经过身份验证的 JWT 令牌。 然后黑客可以使用授权的 JWT 令牌访问这个 api,而无需他的身份验证。 这可以吗? 我想知道 JWT 身份验证实际上是安全的。 你能解释一下吗?

【问题讨论】:

  • 这就是为什么您通过 HTTPS 的加密连接运行所有流量的原因。
  • 如果我们不使用https,JWT认证不安全?
  • 正确。 JWT 本身并不安全。因此,由用户来确保令牌的安全性。

标签: authentication token jwt http-token-authentication


【解决方案1】:

jwt 是包含有关用户身份和声明的信息的代码,并且仅在有限的时间内有效。

除了颁发令牌的授权端点之外,任何人都无法读取或更改代码。因此它是安全的,因为它不能被篡改。这意味着令牌可以完全信任。您不必验证令牌,您可以使用身份信息和声明,而无需查阅数据库。

但这也是缺点。一旦发出令牌,在到期前一直有效,因为到期时间无法更改。这就是为什么令牌只能通过安全线路发送到服务器的原因。您不希望黑客拦截令牌。

但如果发生了,那又如何呢?

有多种选择。您可以使用 short-lived 令牌,这意味着令牌在发出后不久就会过期。如果一个令牌被截获,它只在一小段时间内有效。在这种情况下,您理所当然地认为黑客可以在有限的时间内访问系统。优点是您需要的资源更少,而且黑客的努力可能不值得。

另一种选择是在每个请求上验证令牌。这需要更多资源(例如在数据库中查找),尽管您可以使用某种缓存。如果发生变化,例如 IP 地址,那么您可以使令牌无效。但问题是您是否可以检测到令牌是否是由黑客发送的。

所以这取决于选择的策略。 但是:如果你发出一个长期存在的访问令牌没有验证(因此不可能撤销令牌),那么你会如果黑客获得访问令牌,就会出现问题。所以你需要做一些事情以安全的方式使用它。

虽然我认为这应该足以帮助您理解,但我想提一下 刷新令牌 的使用。如果您使用 short-lived 访问令牌,那么您可能需要实现 long-lived 刷新令牌。这些刷新令牌旨在在过期后获取新的访问令牌。优点是您不需要发送凭据,刷新令牌就足够了。但是,您只能在可以保密的应用程序中实现此功能。因为您肯定不希望黑客拦截(长期存在的)刷新令牌。

使用频率较低(与访问令牌相反),您可以添加逻辑以在使用时验证刷新令牌。您可以查阅数据库并决定拒绝请求(例如,当 IP 地址更改时)并撤销刷新令牌。在这种情况下,用户必须再次识别自己(发送凭据)。

【讨论】:

    【解决方案2】:

    JWT 只是 fsb 服务器和客户端之间的安全消息传输器,以便 fsb 服务器可以确定客户端是否登录;如果登录,fsb 服务器将获取基于个人唯一用户的数据。

    1. 谷歌认证

      1. G 仅当用户拥有 google 帐户并成功正确输入 gmail 和密码时,才会将用户 gid 发送回我的服务器。
      2. 用户 ID 保存在 jwt 的负载中。
    2. jwt

      1. 如果 google 验证用户并且 google 返回 gid
      2. 创建 jwt 内容和内部维护:exp 日期、加密
      3. jwt 被发送并存储在用户浏览器的本地存储中;
      4. 每个用户的 req 将 jwt 发送回我的服务器
      5. 我的服务器使用只有我的服务器拥有的 secretOrKey 对 jwt 进行解码,并从 jwt 获取内容(uid)。
      6. 如果 uid 在我的数据库中,则用户已经注册并且现在正在登录。
      7. 将请求的数据从我的数据库发送给用户,因为他已登录
      8. 如果由于密码错误或 G 邮箱使用无法通过 google 验证,则不会创建 jwt。
    3. JWT 的流程

      1. 用户的谷歌弹出登录
      2. google 服务器将信息返回到我的服务器。如果 gid 不在我的数据库中,我会将它保存在我的数据库中,以便注册用户。
      3. 创建 jwt 并将 uid 添加为内容。有效期。
      4. jwt 发送并存储在用户浏览器的本地存储中
      5. 用户通过http请求一个页面,它包含jwt。我的服务器通过登录确定测试检查此用户是否登录:如果用户的 jwt uid 在我的数据库中,则用户已登录。用户请求的数据将提供给用户。如果用户没有 jwt 或 uid 不匹配,则用户未登录,将用户发送到登录页面。

    JWT 描述

    1. https://medium.com/@rahulgolwalkar/pros-and-cons-in-using-jwt-json-web-tokens-196ac6d41fb4
    2. https://scotch.io/tutorials/the-ins-and-outs-of-token-based-authentication
    3. https://scotch.io/tutorials/the-anatomy-of-a-json-web-token
    4. https://auth0.com/blog/cookies-vs-tokens-definitive-guide/

    【讨论】:

    • 我不知道如何正确整理我笔记中的信息
    猜你喜欢
    • 1970-01-01
    • 2022-07-14
    • 1970-01-01
    • 2020-03-18
    • 2020-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-24
    相关资源
    最近更新 更多