微服务,认证,鉴权,授权 机制如何设计比较通用合理?

查了些资料. 大多都是网关Gateway,做认证.鉴权.
也有根据实际情况,在gateway做认证和部份鉴权+单微服务内做业务鉴权.
我觉得自己的比较合适第二种,gateway+单微服务这种方式.但还有几点疑惑还在犹豫中

环境: spring cloud gateway,nacos,openfeign,(认证.鉴权,授权未使用三方库)

gateway层

  • 认证没有什么问题.
  • 鉴权部分的话,应该只能做根据url的鉴权. 配置url+权限这种方式.这种方式需与api做协调,一边加了url,也需要在gateway层配置这个url+允许权限+拒绝权限.

单个微服务层

  • 需要在业务鉴权,比如管理员,发布者,拥有同样的功能,甚至比发布者更多功能.为了减低相同逻辑的维护成本, 所有觉得用鉴权这种方式比较合适一点.
  • 鉴权方式1,gateway到auth服务加载权限列表,再回gateway做鉴权

    因为gateway加载过这个权限列表,所以在转发时带上这个权限列表,在单个微服务内,直接拿这个权限列表做鉴权,这种方式需要带着权限列表跑.这种方式避免多次加载权限列表,微服务将脱离auth依赖,缺点是需要带着这个列表到处跑.

  • 鉴权方式2,gateway只到auth服务做鉴权,返回鉴权结果

    这种方式需要多次鉴权,gateway跑auth鉴权,微服务跑auth鉴权. 所有需要鉴权的服务都依赖auth

授权

  • 注册权限

    微服务中定义权限,自动注册到权限模块.

  • 授权 权限模块,统一分配


这些只是一些构思,还没有去实现,肯定有不合理的地方,也有些问题还没考虑到.

欢迎大家指点一二. 让我能有机会一次性比较全面的完成这个模块.

阅读 2.5k
1 个回答

网关层认证和鉴权,你可以直接用JWT,直接从JWT里获取用户信息和权限,而不用再查过。“注册权限”和“统一分配”这是一个很好的思路,这样可以保证系统的权限管理是集中和统一的,也方便权限的维护和管理。这些问题你要注意一下:怎么处理权限变更(比如,用户的角色变更,或者权限策略变更)时候的权限刷新问题,以及怎么处理服务间调用的权限传递。至于选那种方式看你的项目需求,如果想要系统的性能好可扩展性高选第一种,如果你想要系统的安全性和数据一致性,那你选第二种。
企业微信截图_16902624556904.png

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