JWT header 参数的用途是什么?

What is the purpose of the JWT header parameter?

很抱歉这个愚蠢的问题,但我是令牌使用的新手,可能不明白某些东西。

我开始阅读有关 JWT 的内容,但对它的结构感到困惑。文档说它分为三个部分:

header
payload
signature

我知道在有效负载中我们保留信息,在签名部分我们保留签名以进行有效负载检查。但是 header 部分的目的是什么?它说通常它由两部分组成:令牌的类型,即 JWT,以及所使用的哈希算法,例如 HMAC SHA256 或 RSA。

  1. 如果服务器已经签署了令牌,那么他就知道它使用的是哪种方法。因此,这对服务器来说不是有用的信息。它根本不会使用这些信息。
  2. 这不是给黑客的提示吗?他们会知道您的服务器使用哪种方法。我不确定这是提高安全性的好做法。

如果这是一个愚蠢的问题,我深表歉意,实际上我们出于某些目的确实需要保留有关我们的签名方法的信息,但我没有找到解释我们为什么需要这个的信息。

JWT 的生产者可能有几种不同的可用方法来保护它。它可以使用具有特定算法或密钥长度的对称或非对称密钥,并且每个组合可能有不同的密钥。此类信息可以包含在 header 中,以便接收方知道使用哪个密钥和算法来验证 and/or 解密 JWT。

接收方和发送方可能不受同一方控制,因此在这种情况下,这肯定是有用的信息,以便接收方知道如何 verify/decrypt 如果发送方可以通过多种方法获取令牌用过的。但即使在它由同一方控制的情况下,正如您似乎暗示的那样,它也可能允许加密算法、密钥或密钥长度的平滑升级。

想象一下,您的服务器转向一个新的密钥对来签署它自己生成和使用的 JWT。然后你可能希望仍然能够验证现有的令牌 - 用旧密钥签名 - 一段时间。在这种情况下,您需要知道在收到 JWT 时使用哪个密钥进行签名。