前景提要: 由于之前的工作项目无论是水平还是垂直都是单体架构的,稍微有微服务的影子的也仅仅是SOA 差分了,具体详见soa和微服务概念,没有真正使用过微服务,那就尝尝鲜吧,毕竟新环境也不能总舒适的copy之前项目 满足于实现功能吧,写本篇时已经抽离了RBAC,服务基于nacos注册中心和sentinel流量监控。今天在设计busi-provider涉及跨服务需要鉴权,网上搜索下普遍两种,
1)在gateway网关层做统一认证:通过用户校验后,传递用户信息到header中,后台做服务在收到header后进行解析,解析完后查看是否有调用此服务或者某个url的权限,然后完成鉴权
2)网关不做处理,各服务各自处理:provider借助拦截器或者AOP校验控制层的注解 或 从服务内部发出的请求,在出去时进行拦截,把用户信息保存在header里,然后传出去,被调用方取到header后进行解析和鉴权
3)设计对外访问的接口增加一个微服务,这个微服务只做查询聚合与数据转换,这样鉴权也只需要对这个微服务做处理。结构是 gateway -> api-provider -> micro1-provider
-> micro2-provider
方案潜在问题:
1)在Zuul或者Gataway中进行校验统一认证有个现象,我没尝试过这个方案,不过仔细想会烦所,特别是网关的URL和后端Service的URL不同的情况,需要做很多判断来决定那些资源是否需要进行拦截,不如(2)利用redis每个服务单独成立一套体系。3) 可以尝试,不过我不想动RBAC代码了,留个技术债吧
代码待续~