首先,让我向你解释我想做什么:
让Imagin Bob想通过Alice获得Authorizat(经典示例(,在我的示例中,Alice是一个服务器。
让我们想象一下Bob和Alice已经得到了每个RSA密钥(4096(。
所以Bobs要做到这一点的步骤是:
- 使用SHA512及其私钥签署信用(明文(
- 使用AES CBC 256加密签名数据和信用
- 用RSA加密AES密钥
- 向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也是,所以这是一个双向问题,没有人确定对方的身份,你可以用证书颁发机构的签名证书来解决这个问题
在发送带有签名的证书时,此证书使用证书颁发机构(第三方(的私钥签名,从而确保客户端-服务器之间的连接是安全的,并防止任何修改。