【发布时间】:2018-03-09 07:15:11
【问题描述】:
假设我在博客应用上有三种类型的用户
- 作者(可以修改自己的帖子,但不能修改其他人)
- 管理员(可以修改所有帖子)
- 读者(不能修改任何帖子)
为了管理这个系统,我想要三个主要的服务:
- API 网关 公开所有客户端将使用的 API,并根据需要组合服务。
- 一个帖子管理服务,为博客帖子提供CRUD操作(包括谁拥有什么帖子的数据)
- 一个授权服务,它存储角色和权限,公开一个 API,它接受一组角色(请求用户拥有的角色)和一组权限(访问 API 所需的权限) ) 并确定这些输入的角色是否涵盖所有输入的权限。
现在我正在努力解决的是资源的所有权(以及应该检查所有权的位置)。
在不与其他服务通信的情况下,授权服务如何在不知道如何确定用户是否拥有给定资源的情况下确定用户是否应该能够访问他们拥有的东西。
我想出了几个不同的解决方案来解决这个问题,尽管我对其中任何一个都不太满意。
- API 网关将查询管理帖子的不同服务,以确定请求用户是否拥有他们尝试访问的帖子,这意味着授权逻辑发生在授权服务之外。
- 管理博客文章的服务将根据所有权处理授权,这也意味着授权逻辑发生在授权服务之外以及未经授权的请求最初被标记为授权的事实(因为它们仍将通过授权服务)
- 授权服务可以知道如何检查所有权,API 必须能够被告知它是否应该检查所有权以及权限。这将增加授权服务的复杂性并增加我希望尽可能多地委托给 API 网关的跨服务通信,因为它应该是主要的服务编写器。
寻找有关替代方法的想法或洞察该问题的最佳解决方案可能是什么。
【问题讨论】:
标签: architecture authorization microservices soa