微服务中应该如何有效地实现分级权限



我有一个场景,其中用户权限的范围是层次结构中的特定位置,例如,一个用户可能对某栋建筑拥有权限,而另一个用户只对该建筑内的某个房间拥有权限。资源的作用域也可以在层次结构中的特定位置。

我希望允许不同的实体类型定义自己的规则,以确定用户是否可以看到特定的资源。例如,一个特定的资源可以被任何拥有该资源范围或以上权限的人看到,而另一个资源可能有严格的要求,即用户必须拥有该资源的范围内的权限。

到目前为止,我想到的方法是:

  1. 每个微服务都有一个sidecar服务,它缓存计算特定资源是否可见所需的层次结构,但这本质上需要与所有部署的微服务一起定位该层次结构
  2. 一种单独的授权服务,被调用以确定是否应授予对特定资源执行操作的权限
  3. 每个微服务在需要时从拥有该层次结构的服务中查询该层次结构,以便检索所需的信息来确定权限检查本身

在微服务环境中,有关这种特定类型权限的信息似乎是有限的。对于这种情况,建议采取什么方法?

我推荐方法2,因为随着体系结构的扩展,您的应用程序不太可能成为身份验证服务的唯一使用者

每当用户登录到您的任何应用程序时,您都会查询身份验证服务,这将返回一个JWT,其中包含分配给特定用户的权限。然后,当用户尝试访问受限资源时,Buildings服务(或类似服务(会查询JWT,查看他们是否具有适当的权限,并返回他们可以访问的内容。

最新更新