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



首先,让我向你解释我想做什么:

让Imagin Bob想通过Alice获得Authorizat(经典示例(,在我的示例中,Alice是一个服务器。

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

所以Bobs要做到这一点的步骤是:

  1. 使用SHA512及其私钥签署信用(明文(
  2. 使用AES CBC 256加密签名数据和信用
  3. 用RSA加密AES密钥
  4. 向Alice发送数据

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

在Alice验证它是Bob之后,她生成一个JWT令牌,并用她的私钥对此进行签名,并将其返回到响应标头授权中。

JWT从3600获得TTL。

到目前为止还不错,但我现在的问题是,我们如何保护JWT免受盗窃?

当然它是签名的,所以它不能被修改(除了攻击者从服务器获得了私钥,但我的天哪,它无论如何都结束了(。

让Imagin,他将能够打破HTTPS并窃取令牌,将其放在他的头中,这样他就可以欺骗Alice相信他,直到它过期,他需要再次发送信用。

我在考虑两个选项:

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

但每次提出要求都会付出巨大的代价,JWT的利益也会失去。

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

我们能做些什么来保护它?

也许我像往常一样想得太多了,但我真的很想知道在这种情况下什么是"最佳实践"。

已经感谢你的答案

到目前为止还不错,但我现在的问题是,我们如何保护JWT免受盗窃?

正如您已经发现的,它是https

让Imagin他将能够打破HTTPS并窃取令牌

如果有人能够破坏HTTPS,那么我们会遇到比被盗标头更大的问题。默认情况下,您可以信任https(某些国家/地区的特殊情况除外(

假设通道不安全,例如,您可以单独对每条消息进行签名(对于不安全的通道,仅保护一个标头是不够的(。

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

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

最新更新