非对称加密算法需要两个密钥: 公开密钥 和 私有密钥。 公钥和私钥是一对,如果用公钥对数据进行加密,只有用对应的私钥才能解密。
甲方 生成一对密钥,将公钥公开,需要向甲方发送信息的其他角色(乙方)使用公钥对机密信息进行加密之后发送给甲方。甲方再利用自己的私钥对加密后的信息进行解密
私钥签名令牌 公钥验证 (项目中的JWT原理)
- 张三有两把钥匙,一把是公钥,另一把是私钥。
- 张三把公钥送给他的朋友们----李四、王五、赵六----每人一把。
- 李四要给张三写一封保密的信。她写完后用张三的公钥加密,就可以达到保密的效果。
- 李四要给张三写一封保密的信。她写完后用张三的公钥加密,就可以达到保密的效果
- 张三收信后,用私钥解密,就看到了信件内容。这里要强调的是,只要张三的私钥不泄露,这封信就是安全的,即使落在别人手里,也无法解密。
重点是:张三给李四回信
张三给李四回信,决定采用"数字签名",注:这个过程就是JWT的签名防篡改。他写完后先用Hash函数,生成信件的摘要(digest)。张三将这个签名,附在信件下面,一起发给李四
李四收信后,取下数字签名,用张三的公钥解密,得到信件的摘要。由此证明,这封信确实是张三发出的。李四再对信件本身使用Hash函数,将得到的结果,与上一步得到的摘要进行对比。如果两者一
致,就证明这封信未被修改过。
传统的: 验证token是否合法
题外话: 当用户拿着从授权服务得到的token去访问资源服务器,资源服务器是将token返回给授权服务验证,验证token是否合法
这样就会导致,大量的从资源服务器到授权服务器的请求,如何优化呢?就是采用的非对称加密
jwt的组成:
- 头部
- 载荷
- 签证(核心点)
更新后:采用了非对称加密算法之后的访问 == > 减少了资源服务器和授权服务器之间的频繁的验证
使用私钥,注意这里授权服务是使用私钥生成jwt令牌的签名部分,防止jwt被篡改
资源服务器 可以使用公钥对令牌进行 合+
法性的校验
所以说:公钥和私钥的作用不只是:公钥进行加密,私钥进行解密。我们还可以利用私钥进行签名,生成令牌,然后公钥 校验令牌签证的合法性