API网关(Zuul)如何权限控制各个微服务的接口

新手上路,请多包涵

前景:当前项目使用Spring CLoud全家桶,用户鉴权逻辑统一写在Zuul的filter中,到达Zuul的请求中携带的token不正确,则返回鉴权失败,否则路由到指定微服务,filter中人为跳过登录接口(/login)校验
问题:系统运行业务后发现很多场景下不需要用户鉴权,例如网站首页的文章查看等,这时候如果还是在filter中一个个加上要跳过鉴权的接口uri,我感觉有点傻。请问有比较优雅的方式,可以实现控制接口是否需要被Zuul鉴权。

阅读 23.4k
4 个回答
新手上路,请多包涵

这么久都没人回答,我自问自答吧~
想要在接口层面控制认证和限流等操作,粒度太细,目前我问了一圈,给出的方案基本是基于url字符串分析ORZ,与我现采取方案思路一致,做法可以弄的高级点,例如在api gateway中,把微服务的接口管理起来,接口信息可以由各个服务在启动的时候上报给gateway。
还有一种就是比较粗粒度的,以uri前缀区分是否需要进行认证,限流等,如/admin开头的uri需要认证,/reward开头的uri需要限流等

新手上路,请多包涵

url策略一般是默认必须鉴权,带"/xxx/"的是公开接口跳过鉴权,未必非得是前缀,否则影响路由规则.和服务方开发约定好url规则

新手上路,请多包涵

微服务搞个公共依懒包,里面搞个网络拦截器,里面判断行不行

新手上路,请多包涵

你用注解方式,在每个api上面使用接口需要的权限;
filter里来请求的时候拿目标api的注解,从而判断权限。
这样你就不用基于uri通配的方式鉴权了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进