【问题标题】:Using JWT to send username, password to authenticate使用 JWT 发送用户名、密码进行身份验证
【发布时间】:2017-02-13 00:37:27
【问题描述】:

刚开始寻找 JWT,我首先看到的示例要求用户使用包含纯文本用户名和密码的请求正文执行 POST 请求。 在此请求通过身份验证后,将发送一个 JWT,然后将其用于进一步的请求。

显然我在这里遗漏了一些东西,但我不是只是在第一次请求时发送了不安全的数据吗?这是我需要 HTTPS 的地方吗?

【问题讨论】:

  • 是的,您应该通过 https 发送用户名/密码
  • @webdeb 谢谢。如果我打电话给服务器,服务器会给我一个网络令牌,然后我发送用户名/密码怎么办。那行得通吗?另外,如果我有 https,我是否只使用 HTTPS 进行第一次调用,然后使用 Web 令牌完成其余的调用?

标签: javascript jwt


【解决方案1】:

JWT 不会为您提供开箱即用的安全性,其主要目的是确保令牌没有被不受信任的权威机构更改。它只是验证里面的数据是否正确。

但是,JWT 本身,它的数据块是任何人都可以读取的,你可以在客户端解析它,并从中读取用户名/电子邮件/,如果你愿意,攻击者也可以读取它, 如果数据块本身没有加密。

HTTPS 将加密客户端 服务器之间传递的所有数据。它与身份验证无关,它只是一个协议,无论如何你都应该使用它,无论是否使用 JWT。

【讨论】:

    【解决方案2】:

    JWT 用于对之前已经向服务器进行身份验证的用户进行身份验证,并且在无状态环境中非常有用,而不是在有状态环境中。

    JWT 的目的是在用户身上存储足够的数据,以便接收它的服务器可以使用它来决定用户是否合法以及他可以做什么。它们在分布式环境中非常有用,因为您可以将 JWT 从一台服务器传递到另一台服务器,并且只要它们都持有签名密钥,它们将能够仅基于令牌对用户进行身份验证。

    用户名和密码仅在第一个请求中对服务器来说是必需的,因此服务器可以根据用户数据库对用户进行身份验证,然后,之后的每个请求都将使用令牌,使服务器能够对用户进行身份验证,而无需在每次请求时再次往返数据库。

    就 HTTPS 而言,我会说 - 将它用于一切。在当今无处不在的无线网络中,您的数据比以前更加暴露。

    【讨论】:

      猜你喜欢
      • 2018-07-13
      • 2019-03-15
      • 2017-01-26
      • 1970-01-01
      • 2015-04-28
      • 2016-01-06
      • 2021-12-14
      • 2016-11-09
      相关资源
      最近更新 更多