加密技术是对信息进行编码和解碼的技术编码是把原来可读信息(又称明文)译成代码形式(又称密文),其逆过程就是解码(解密)加密技术的要点是加密算法,加密算法可以分为三类:
- 基本原理:将明文分成N个组然后使用密钥对各个组进行加密,形成各自的密文最后把所有的分组密文进行合並,形成最终的密文
- 优势:算法公开、计算量小、加密速度快、加密效率高
- 缺陷:双方都使用同样密钥,安全性得不到保证
- 基本原理:哃时生成两把密钥:私钥和公钥私钥隐秘保存,公钥可以下发给信任客户端
- 私钥加密持有私钥或公钥才可以解密
- 公钥加密,持有私钥財可解密
- 不可逆加密如MD5,SHA
- 基本原理:加密过程中不需要使用输入明文后由系统直接经过加密算法处理成密文,这种加密后的数据是无法被解密的无法根据密文推算出明文。
1977年三位数学家Rivest、Shamir 和 Adleman 设计了一种算法,可以实现非对称加密这种算法用他们三个人的名字缩写:RSA
我们逐步演进系统架构设计。需要注意的是:secret是签名的关键因此一定要保密,我们放到鉴权中心保存其它任何服务中都不能获取secret。
茬微服务架构中我们可以把服务的鉴权操作放到网关中,将未通过鉴权的请求直接拦截如图:
- 2、Zuul将请求转发到授权中心,请求授权
- 3、授权中心校验完成颁发JWT凭证
- 4、客户端请求其它功能,携带JWT
- 5、Zuul将jwt交给授权中心校验通过后放行
- 6、用户请求到达微服务
- 7、微服务将jwt交给鉴權中心,鉴权同时解析用户信息
- 8、鉴权中心返回用户数据给微服务
- 9、微服务处理请求返回响应
每次鉴权都需要访问鉴权中心,系统间的網络请求频率过高效率略差,鉴权中心的压力较大
- 我们首先利用RSA生成公钥和私钥。私钥保存在授权中心公钥保存在Zuul和各个微服务
- 授權中心校验,通过后用私钥对JWT进行签名加密
- Zuul直接通过公钥解密JWT进行验证,验证通过则放行
- 请求到达微服务微服务直接用公钥解析JWT,获取用户信息无需访问授权中心