代码之家  ›  专栏  ›  技术社区  ›  Shahin Ghasemi

用于身份验证的HTTPS或JWT?

  •  2
  • Shahin Ghasemi  · 技术社区  · 6 年前

    我搜索了一会儿不同的身份验证方法,最后决定使用JWTs。 然而,我对基于JWT的身份验证感到困惑。

    我的问题是:我们应该通过HTTPS发送JWT吗?如果是,那么我们为什么要使用JWT呢? 为什么不在没有JWT的情况下通过HTTPS发送所有需要的信息呢 ?

    换句话说,如果没有HTTPS存在安全问题(比如中间人攻击),那么使用JWT进行身份验证的原因是什么?有没有其他不使用HTTPS就能完美工作的身份验证方法?

    3 回复  |  直到 6 年前
        1
  •  6
  •   gusto2    6 年前

    在这里,您混合了两种不同的协议级别。

    HTTPS(或者更确切地说是TLS——传输级安全性)是一种传输层——数据传输管道,确保您与合法服务器通信,并且任何人都无法读取或更改交换的数据。HTTPS不关心数据本身(例如身份验证)

    JWT通常用作描述客户身份和其他属性的有效负载(数据本身)的一部分。

    最常见的情况是,你需要两种方式——JWT来确保身份验证或授权,以及TLS/HTTPS来确保没有人可以窃取或更改你的JWT令牌或数据。

    HTTPS可以提供客户端身份验证,但客户端需要有其客户端密钥对和证书,这不是真正免费或易于管理的(例如,电子身份证就是这样工作的,或者我经常在服务器到服务器的场景中看到)。

        2
  •  2
  •   Daniel    6 年前

    在@gusto2上展开

    JWT和HTTPS实现不同的目标。安全系统的三个主要组成部分。

    • C-保密性-数据是否安全,不会被外部阅读?
    • I-完整性-数据是否安全,不会被外部人士篡改?
    • A-真实性-数据由合适的人发送

    HTTPS确保了机密性和完整性。 JWT有助于提高真实性。然而,你的工作是确保代币 是有效的。这不是现成的。

        3
  •  0
  •   dowonderatwill    3 年前

    为什么不在没有JWT的情况下通过HTTPS发送所有需要的信息呢?

    我认为主要的一点是,Restful或基于API的交互是无状态的。所以在所有的交互中,服务器都需要获得令牌才能知道真实性。为了确保所有请求都来自登录的真实用户,它需要获得相同的JWT。

    因此,正如丹尼尔所说,OP中的问题的答案是真实性。

    在基于正常形式的请求中,我们不使用令牌,为什么?因为它是有状态的,我们将信息保存在会话或cookie中。但是API是无状态的,所以需要发送一些令牌。