鉴权方案
通用流程:
1. 用户通过gateway访问某服务
2. 如果该请求未携带token【无token该请求必须是登录,其他请求一定带token,可以在gateway中配置判断】,gateway先请求auth鉴权服务,然后auth根据用户名密码,返回用户的role角色和permission权限。----RBAC
3. 【选做】如果有需要,可以角色绑定规则,根据规则进行更细粒度鉴权。比如说,只允许9点到6点管理员登陆,或者是只允许某些IP登录。 推荐使用ABAC框架 LoopAuth ----ABAC
4. gateway收到权限时,可以储存或者不储存到gateway的redis中。储存的意义在于,后续访问的时候可以直接通过用户token获取对应jwt,这样不用访问auth服务,减少io。但是这样做的坏处在于,无法踢人下线,除非auth和gateway公用一个redis。如果不储存,每次访问都需要将用户token发送给auth服务,auth服务通过token返回具体信息给gateway,增加了网络io。将权限角色之类信息放到header中,用jwt发送给微服务。
5. 后续微服务返回前端的时候,请不要带上jwt,应该放回auth返回的token,auth应该储存token和jwt对应关系,大多数情况应该储存在redis中。
6. 后续每次都应该gateway/auth将用户token转化为jwt,传递给后续微服务。