老师好,结合你的两门课程,我实现了一套安全模块,目前完成了认证服务,现在正在做权限验证,有几个一直苦恼着我。我想到3种方案,老师看下是否合理或者有没有更好的方案。
认证流程我们就不过了,假设已经获得token
1:携带token经过网关访问到某个服务,与认证服务类似,同样访问权限认证服务(独立的服务),如果权限认证通过,则放行请求到具体的服务。这个方案我想到2个问题,第一是光认证和授权就有2次http请求,感觉网络开销比较大,第二是权限认证服务需维护的权限信息会一直变大,导致认证速度变慢,变慢会导致认证回调超时,可能出现有权限的情况下,因为响应问题请求被降级而提示没有权限。
2:携带token经过网关,token认证通过后,直接访问到具体的服务,各个服务维护自己的权限数据,并各个服务自行校验权限。这个方案我想到3个问题,第一是每个微服务的权限怎么同步(系统启动时和权限修改时,使用消息总线进行通知重新装载权限?),第二是用户携带的token一般不会携带权限信息,权限信息怎么获取,获取到的权限如何缓存(存储到redis?),第三是这样设计是否存在老师所说的业务服务与权限耦合。
3:权限资源在网关中存储,携带token经由网关调用认证服务认证通过后,网关鉴权,鉴权通过后放行访问具体的服务。这个方案与第一个相比减少了一次http请求,但仍然感觉会有第一种方案的第二个问题出现。
以上3种方案是我想到的,我看了很多开源的微服务脚手架,他们采用的方案大部分是第二种,其次是第一种。我比较倾向于第二和第三种,还请老师给出意见。
登录后可查看更多问答,登录/注册