在分布式系统中的基于声明的访问控制

6
我正在尝试理解在分布式系统中使用基于声明的访问控制,以及如何管理和处理它们。我认为我可能会混淆由身份验证服务发出的声明和由授权服务发出的声明。所以,如果您能帮助我澄清这一点,我将不胜感激。
场景:
我有一个受信任的联合服务器,用于多个微型站点的单点登录。每个微型站点都有特定的功能。例如,产品门户(用于创建和管理产品)和账单门户(用于创建、查看和支付发票)。
该系统由许多人使用:管理员对整个系统拥有完全掌控权。内部财务部门只关心账单门户。同样,内部产品团队只关心产品门户。最后,客户需要访问两个门户,但没有任何后端权限。
联合身份验证:
据我了解,当用户成功经过联合服务器进行身份验证时,联合服务器会向请求的微站提供有关该用户身份的声明。这些声明可能包括:
- 用户电子邮件地址: bob@example.com - 用户名: Bob - 用户类型: 产品团队 - 与用户身份相关的其他信息
它不提供任何与用户操作相关的内容(这可能是我第一个误解)。请注意,用户类型实际上是对角色的声明。这种术语是否正确?在这种情况下,声明是否与权限声明不同?
微站授权:
一旦用户经过身份验证,微站就需要知道该用户被允许做什么。虽然该站点会提供一个“用户类型”(它是对角色的声明),但我更喜欢使用基于声明的方法。这将在权限上提供更细粒度的控制。例如:
- Bob 应该能够编辑价格,但不能创建产品。 - Bill(也在产品团队中)只能添加产品。 - Ben 只能删除产品。 - Alice(财务)没有任何权限。
与角色相比,使用声明可以为微站提供额外的灵活性来授予特定的权限。
问题:
- 这些允许操作的声明应存储在哪里? - 每个微站是否应提供自己的联合身份 - 到 - 微站声明映射服务? - 每个微站是否应缓存这些声明?如果 Bob 从产品团队调到了财务部门怎么办?

我之所以问这个问题是因为我们的开发部门进行了一场辩论,我们的最高级开发人员认为联合服务器应该提供每个微网站所需的所有声明。这似乎会将联合服务与每个微网站紧密耦合。

1个回答

6
所以...这里有几个要素。让我们开始吧。
首先,中央认证服务是在分布式系统场景下认证用户的好方法,但可能不是处理所有连接的微站点和/或微服务的授权的最佳位置。
基于声明的身份验证
明确一下,在CAS(中央认证服务)中是您添加所有相关声明的地方,无论是角色、标志还是任何其他您以后可能需要的信息。
但是这里我建议您也熟悉资源基础授权(如果您还没有)。
基于资源的授权
这里的概念是通过询问声明主体是否具有对资源而不是角色的访问权限来确定访问系统(微站点/微服务)的部分和特定功能。
现在,这里通常会有人迷失在翻译中。角色被表示为声明;资源也被表示为声明。
为了确定对产品门户的访问权限,您可以检查是否存在ProductPortal声明(可以命名为任何内容)。重要的是,您不是检查用户是否具有管理员角色,而是根据资源声明检查。因此,当您决定在路上不仅管理员角色的用户应该访问门户时,您可以添加ProductPortal资源声明到任何其他用户上,根据您需要的任何标准赋予它们,例如:角色、标志等。
但是,这代表了未来的问题。如果您为分布式系统中每个微站点/微服务中需要的每个资源添加一个声明,那么您最终会得到大量的声明。不仅如此,由于某些资源在某些微站点/微服务上是相关的,但在其他微站点/微服务上却不是相关的,因此您携带着一个装满声明的包,在任何给定时间内只有少数声明与给定微站点/微服务相关。
然而,请不要担心,因为这也有一个优雅的解决方案。
声明转换
这是一个过程,您通常会将其注册为中间件或过滤器来拦截每个请求,读取声明(因此读取其角色和标志),并使用与您输入的微站点/微服务相关的资源声明来丰富传入的声明主体。
这样,您不必携带大量的声明,并且您可以将身份验证与授权解耦,将将正常声明转换为资源声明的逻辑推送到了最好地了解需要控制访问和权限的部分和功能的资源的系统中,即使您希望如此,也可以将其下推到粒度级别。
直奔主题
这些允许操作的声明应存储在哪里?
在声明原则中,您可以将其作为访问令牌、会话变量或其他内容进行传递。
  • 每个微网站是否应提供自己的联合身份-到-微网站声明映射服务?
声明转换(或声明映射)将驻留在每个微网站中;这是最了解将其功能表面最好地映射到资源的位置。
  • 每个微网站是否应缓存这些声明?如果Bob从产品团队转移到财务团队怎么办?
不要缓存。您传递的访问令牌(或会话)将以声明形式保留最少的信息。由于声明的丰富化发生在微网站中的声明转换过程中,因此当Bob从产品团队转移到财务团队时,他将失去一些角色声明并获得其他声明,这些声明将被正确地翻译为在访问它时相关的资源声明,给予他访问您认为适当的部分和功能所需的权限。
希望我没有使它太混乱。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接