首页 > 解决方案 > 微服务架构中的资源级授权

问题描述

我需要为一个基于微服务架构的应用程序设计一个授权方案。

我将专注于 3 个微服务来定义问题。

  1. API网关服务
  2. 项目服务 - 处理项目元数据信息,如(project_id、name、description ...)
  3. 计费服务 - 处理项目计费流程并保存(project_id、billing_information)

当前的授权模型需要 RBAC 和 ACL(基于资源),其中每个用户都定义了一组角色(管理员、项目经理等),并且还可以定义哪个用户可以通过其 ID 访问哪个项目(项目经理 X 可以访问项目 1,2 但不是 3,4)

问题数:

  1. 谁负责管理项目的 ACL?哪个用户可以访问哪个项目?(假设你可以有很多项目)
  2. 当用户在提供 project_id 时尝试访问 Project 服务或 Billing 服务时,应如何验证授权?

看到一些解决方案建议应该添加一个集中式微服务来运行此操作,并且出于性能原因它应该将其信息传播到其他服务(例如,如果用户想要获取他可以看到的所有相关项目 - 这将是很多如果项目服务将在他的服务中加入授权信息,则速度更快)。这可能会引发一个问题,即添加新的 ACL 对象并且授权对象将开始增长。

其他人说这应该在微服务级别处理 - 但是谁最终负责 ACL?如果是项目微服务,那么当计费服务需要授权时——它应该调用项目微服务吗?

标签: authorizationmicroservicesacl

解决方案


真的很难说什么是最好的解决方案,但我可以提出类似于我们之前使用的方案,它是集中用户角色管理加上对服务本身的授权检查的组合。

这个想法是拥有一个中央身份验证和授权服务,它将为您提供具有角色的用户信息(一个示例可能是中央 OAuth2)。在服务方面,您应该获取此信息并检查提供的角色是否允许。

对于 ACL,我认为您可以将该信息保留在资源端(项目服务)——允许访问资源的用户——因为它将在每个项目中指定。再次对服务进行第二次授权检查,并依次或一起进行角色检查。


推荐阅读