JWT 密钥 - 非对称和对称

JWT Keys - Asymmetric and Symmetric

我了解对称密钥和非对称密钥之间的区别。我知道密钥用于计算签名然后验证它们。然而,深入一点,我想了解更多我在网上找不到的东西。

是否将密钥提供给消费者以验证内容?如果使用对称密钥,这不会让消费者能够更改 JWT 内容吗?

当使用非对称密钥时,签名是用私钥还是public密钥计算的?消费者是否获得了 public/private 密钥?

对称密钥只能以对等方式使用,因此接收方修改 JWT 毫无意义,因为只有他和发送方拥有共享密钥(并且他是预期的接收方) .

非对称密钥签名(在 JWT 中以及一般情况下)由发送方使用私钥生成,并由接收方使用 public 密钥进行验证。 consumer/receiver 仅获得 public 密钥,该密钥发生 out_of_band(即通过另一种通信方式而不是您用来交换安全数据的方式)。

对于使用发送方的私钥签名的非对称 JWT (JWS),令牌的接收方基本上是接收明文[中的有效负载(header/claims) =14=] 其他被base64编码。这就是为什么它们需要在安全套接字层 (SSL) 环境中传输的原因。为了验证接收到的签名,接收方使用 Public 密钥重新计算接收到的有效负载的签名。如果接收签名和计算签名这两个签名不匹配,则无法信任有效载荷——它是无效的 因此,这样的非对称 JWS not 是包含敏感 "claim"(例如社会保险号)的好方法,因为有效负载的内容未加密。 在 JWT 中包含此类敏感数据可以使用 Json Web Token Encrypted JWE。在 JWE 中,整个有效负载都是加密的。

没有人会加密 JWT 的负载。一切都与签名有关! RSA 或 ECDSA(均为非对称)签名可以仅使用公钥进行验证,对于对称签名签名,您需要授权服务。

最常见的 JWT 签名算法:

HMAC + SHA256
RSASSA-PKCS1-v1_5 + SHA256
ECDSA + P-256 + SHA256

查看更多https://www.rfc-editor.org/rfc/rfc7518#section-3