结合Zuul的鉴权流程
我们逐步演进系统架构设计。需要注意的是:secret是签名的关键,因此一定要保密,我们放到鉴权中心保存,其它任何服务中都不能获取secret。
没有RSA加密时
在微服务架构中,我们可以把服务的鉴权操作放到网关中,将未通过鉴权的请求直接拦截,如图:
-
1、用户请求登录
-
2、Zuul将请求转发到授权中心,请求授权
-
3、授权中心校验完成,颁发JWT凭证
-
4、客户端请求其它功能,携带JWT
-
5、Zuul将jwt交给授权中心校验,通过后放行
-
6、用户请求到达微服务
-
7、微服务将jwt交给鉴权中心,鉴权同时解析用户信息
-
8、鉴权中心返回用户数据给微服务
-
9、微服务处理请求,返回响应
发现什么问题了?
每次鉴权都需要访问鉴权中心,系统间的网络请求频率过高,效率略差,鉴权中心的压力较大。
结合RSA的鉴权
直接看图:
-
我们首先利用RSA生成公钥和私钥。私钥保存在授权中心,公钥保存在Zuul和各个信任的微服务
-
用户请求登录
-
授权中心校验,通过后用私钥对JWT进行签名加密
-
返回jwt给用户
-
用户携带JWT访问
-
Zuul直接通过公钥解密JWT,进行验证,验证通过则放行
-
请求到达微服务,微服务直接用公钥解析JWT,获取用户信息,无需访问授权中心