接上一篇文章:服务器验证JWT_token的过程
上文谈到,原始的 JWT 加密方式把哈希运算的盐值 secret_key 保存在各大服务器中,不对外公布。但是如果盐值泄露则会造成不可挽回的损失,即其他人也可以拿着盐值对任意用户进行签名,伪造登录。
解决方法:
使用非对称密匙
对产生的 Signature 用私匙进行二次加密,将加密后的内容发送给用户。
当用户请求其他服务时,其他服务先对 Signature 进行公匙解密,得到 Signature 的原始内容,然后再进行验证(注意:为了安全起见,公匙也是只能存在各大服务器中,不能对外公布)。如图:
考虑在此种情况下,就算不法分子同时拿到公匙和哈希运算的盐值,但是也不能伪造用户请求,因为私匙始终没有泄露,所以我们就能够很好的将要保护的范围缩小到包含私匙的这一台计算机。
当然,使用非对称加密也会在一定程度上会消耗计算机的性能,因此这是一种牺牲效率来换取更加安全的方式。