JWT 使用非对称加密

JWT Using Asymmetric Encryption

我想问一下,在使用非对称加密时,我们使用客户端的public密钥加密数据,那么客户端可以使用他们的私钥解密数据吗?

我刚刚找到使用 RSA 签署 JWT 的教程,但我发现它们使用服务器私钥而不是客户端的 public 密钥加密数据,并且服务器的 public 密钥在客户端之间共享。

它还安全吗?因为如果 public 密钥因为可共享而落入坏人之手,那么每个人都可以解密吗?

所以,这样签署 jwt 可以吗?

参考文献:tutorial1 tutorial2

so the client can decrypt the data using their private key right?

是的,如果是加密数据,这是正常的方式。

但在 JWT 的情况下,它不是关于加密只有接收者应该解密的东西,而是关于签署令牌。

目标是,只有一个实例,例如身份验证服务器或通常是令牌发行者可以签署令牌,但每个人都可以使用 public 密钥验证签名。

Because if the public key is fall to the wrong hands because it's shareable, everyone can decrypt it right?

public 钥匙不能落入坏人之手,因为它是 public。所以根据定义,每个人都可以看到它。

令牌的内容(即有效负载)未加密,只是经过 base64url 编码,任何人都可以读取,例如 https://jwt.io

so, is it okay to sign the jwt like that?

在这个场景中,目的不是加密数据让其他人无法读取("confidentiality"),而是对数据进行签名以便其他人使用public密钥可以验证您拥有私钥并且您实际签署了数据。本例中的数据是 JWT header 和负载的哈希值。私钥用于签名,因此只有一个实体(身份验证服务器)可以对 JWT 进行签名。 public 密钥用于签名验证,以便任何拥有 public 密钥的第三方都可以验证 JWT。 public 密钥不能用于创建有效签名。

所以是的,它很安全!