我需要为基于微服务架构的应用程序设计授权方案。
我将聚焦于三个微服务来定义问题:
- API网关服务
- 项目服务 - 处理项目元数据信息,如(project_id、名称、描述...)
- 计费服务 - 处理项目计费过程并保存(project_id、billing_information)
当前的授权模型要求使用RBAC和ACL(基于资源的),其中每个用户都有一组定义好的角色(管理员、项目经理等),还可以定义哪个用户可以访问哪个项目按其ID(项目经理X可以访问1,2号项目但不能访问3,4号项目)。
问题数量:
- 谁负责管理项目的ACL?哪个用户可以访问哪个项目?(假设有很多项目)
- 当用户尝试提供project_id访问Project服务或Billing服务时,应该如何验证授权?
看到一些解决方案建议添加一个集中式微服务来运行此操作,并应为性能原因向其他服务传播其信息(例如,如果用户想要获取他可以看到的所有相关项目,这样做将更快,如果Project服务将加入授权信息,它的服务)。这可能会引发一个问题,即新的ACL对象将被添加,授权对象将开始增长。
其他人认为这应该在微服务级别处理 - 但最终谁负责ACL?如果是Projects 微服务,则当Billing服务需要授权时,它应调用Projects微服务吗?