如何使用 RSA、AES 和 JWT 进行安全授权?

How to do a Secure Authorization with RSA, AES and JWT?

首先,让我解释一下我想做什么:

假设 Bob 想要获得 Alice 的授权(经典示例),在我的示例中,Alice 是一个服务器。

让我们也想象一下,Bob 和 Alice 已经获得了每个 RSA 密钥 (4096)。

所以 Bobs 的步骤是:

  1. 使用 SHA512 和他的私钥签署学分(明文)
  2. 使用 AES CBC 256 加密签名数据和信用
  3. 使用 RSA 加密 AES 密钥
  4. 正在向 Alice 发送数据

所以 Alice 会从相反的方向执行上述步骤来解密它并从 Bob 验证它。

在 Alice 验证它是 Bob 之后,她生成了一个 JWT 令牌并使用她的私钥对其进行签名,并在响应 Header 授权中对其进行 Return 签名。

JWT 从 3600 获得了 TTL。

到目前为止一切顺利,但我现在的问题是我们如何保护 JWT 不被盗用?

确定它已签名,因此无法修改(除了攻击者从服务器获得私钥,但我的天哪,它无论如何都结束了)。

让我们想象一下,他将能够破解 HTTPS 并窃取令牌,将其放入他的 Header 中,这样他就可以欺骗爱丽丝相信他,直到它过期,他需要再次发送积分。

我在考虑两个选项:

选项 1: 总是发送 Credits 和 Decrypted 来验证 Bob。

但这会在每次请求时消耗巨大的性能,并且 JWT 的好处会丢失。

选项 2: 发送唯一 ID 并从 Bobs 设备确认它(加密,与选项 1 相同的问题)

我们可以做些什么来保护它?

也许我想太多了,一如既往,但我真的很想知道在那种情况下会是什么"Best Practise"。

谢谢你的回答

好吧,如果 Alice 不确定是谁发送了请求,那么 Bob 也不确定,所以这是一个双向问题,没有人 确定对方的身份,您可以使用来自证书颁发机构的签名证书来解决此问题。

您发送带有签名的证书,并且此证书是使用证书颁发机构(第三方)的私钥签名的,这确保了客户端服务器之间的连接是安全的并防止任何修改。

So far so good but my Question is now how do we Protect the JWT from getting Stoled ?

如您所知,它是 https

Lets Imagin he would be Able to Break the HTTPS and stealing the token

如果有人能够破解 HTTPS,那么我们的问题就比被盗的问题大得多 header。默认情况下,您可以信任 https(某些国家/地区的特殊情况除外)

假设通道不安全,例如,您可以分别对每条消息进行签名(使用不安全的通道,仅保护 header 是不够的)。