假设我在博客应用上有三种类型的用户
为了管理这个系统,我想要三个主要服务:
现在我正在努力解决的是资源的所有权(以及应该检查所有权的位置)。
如果不与其他服务通信,授权服务如何确定用户是否应该能够访问他们拥有的东西,而无需知道如何确定用户是否拥有给定的资源。
我想出了几个不同的解决方案来解决这个问题,尽管我对其中的任何一个都不满意。
寻找有关替代方法的想法或深入了解此问题的最佳解决方案可能是什么。
最佳答案
由于它是外部化的,授权服务应该尽可能地“愚蠢”。有时,基于业务逻辑和数据的“授权”会变得非常复杂。我认为业务逻辑属于负责管理它的服务。此外,API 网关可能需要向客户端提供所有权状态(来自管理这些博客文章的服务?),以便客户端可以知道要公开什么。所以保持授权简单,并封装更复杂的业务检查,看看可以在服务本身内完成什么。
另一种方法是加强授权服务以采用另一个参数,在这种情况下,所有权状态。 API 网关或其他服务检查授权(博客帖子管理器?)可以先从了解所有权业务的服务中获取所有权状态,然后使用提供角色和所有权状态的授权服务。权限规则将(可选)基于角色和真/假指标。授权服务不知道真/假是什么意思,只是为角色“读者”+指标=真和角色“管理员”+指标=假授予“编辑帖子”权限或 角色“管理员”+指标=真等。
关于architecture - 授权服务如何在基于角色的微服务架构中实现所有权检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46453981/