代码之家  ›  专栏  ›  技术社区  ›  Drazen Bjelovuk

为什么jwts需要由客户验证?

  •  2
  • Drazen Bjelovuk  · 技术社区  · 8 年前

    因此,我的理解是服务器通过私钥签名,并且通过将公钥解密的签名与服务器端和客户端的报头+有效负载进行比较,验证了它的合法性:

    令牌由一方的私钥(通常是 服务器),以便双方(另一方已经 适当和可信的手段,拥有相应的 公钥)能够验证令牌是合法的。 1

    我只是想知道客户需要什么来验证JWT的真实性?我知道同样的机制用于SSL,在这种情况下,客户端验证对我来说是有意义的,因为证书包含客户端用来加密初始握手的公钥。但我很难理解在jwts的情况下,公共可验证性有什么好处。如果JWT是非法的,那么它将在服务器上失败,并且客户端除了将其附加到请求之外,没有做任何特别的事情。

    服务器上的一些私盐不能满足它的目的吗?服务器通过使用相同的盐散列有效载荷进行验证,并与签名进行比较。在这种情况下,只有服务器可以验证,但那又怎样呢?

    1 回复  |  直到 8 年前
        1
  •  3
  •   pedrofb    7 年前

    因此,我的理解是JWT是由服务器用私钥签名的,并且通过将公钥解密签名与头/有效载荷比较,服务器/客户端都可以验证其合法性:

    蒂伊斯 不完全 . jwt可以使用密钥对的私钥(例如rsa)签名,也可以使用对称密钥(例如hmac)签名。在这种情况下,相同的密钥用于签名和验证令牌

    我只是想知道客户需要什么来验证JWT的真实性?

    当令牌使用非对称密钥对签名时,客户端将验证该令牌。使用对称密钥时,只有颁发方知道该密钥,因此客户端无法验证它

    请看我的答案: When to use RS256 for JWT?

    我知道同样的机制用于SSL,在这种情况下,客户端验证对我来说是有意义的,因为证书包含客户端用来加密初始握手的公钥。

    握手中使用的某些数据由服务器使用其私钥进行数字签名(未加密),并由客户端验证

    如果JWT是非法的,那么它将在服务器上失败,并且客户端除了将其附加到请求之外,没有做任何特别的事情。

    不,如果验证服务器与颁发服务器不同 (请再看上面的链接)。

    假设令牌已经由第三方(例如GOGGLE或脸谱网)发出,这是OAuS2认证过程的结果。它可以包含连接的用户的详细信息,并且已经使用重定向提供给服务器,因此您不能信任主叫方。必须验证令牌是否已由预期参与方颁发。