基于声明的授权与基于属性的访问控制

信息安全 访问控制 授权 术语
2021-08-25 22:57:08

通常与XACML相关联的基于属性的访问控制似乎是微软创造的术语基于声明的授权之间是否有区别?

后者仅仅是微软对 ABAC 的名称/实现吗?还是两个完全不同的概念?

我在研究过程中遇到了这两个术语,它们对我来说似乎很相似,如果不相同的话,但也许我遗漏了一些东西?声明和属性是否只是同一想法的不同名称?

属性:

基于属性的访问控制定义了一种新的访问控制范例,其中通过使用将属性组合在一起的策略授予用户访问权限。(维基百科)

索赔:

基于声明的授权是一种方法,其中授予或拒绝访问的授权决定基于任意逻辑,该逻辑使用声明中可用的数据来做出决定。(MSDN)

2个回答

ABAC 和 CBAC 实际上是一回事。Microsoft 不将事物称为属性,而是将它们称为声明,因为属性往往与 SAML 相关联,而声明大多与协议无关。

XACML 是公开 ABAC 的模型/实现,而没有任何具体的 CBAC 模型或实现——反正不是来自微软。这主要是因为通用授权模型令人头疼且过于复杂,并且指导的要点是每个应用程序在权限方面都是不同的,因此您应该自己弄清楚。

CBAC(基于声明的访问控制)和 ABAC(基于属性的访问控制)本质上是相同的,其中声明是断言的“属性”。例如,您从 Active Directory 中获取一个属性并将其转换为声明。

但是,CBAC 存在一些问题:

  • 首先,它是 Microsoft 特定的术语,而不是像 ABAC 或 RBAC 这样的模型本身。
  • 其次,微软自己使用 CBAC 来表示不同的东西。.NET 中的 CBAC、Windows Server 2012 (Windows Server 8) 中的 CBAC 和 Sharepoint 中的 CBAC 等等
  • CBAC 不定义授权本身,而只是定义您如何获得声明或属性。它将“您如何理解声明”的整个框留给实现,这就是为什么 CBAC 在 SharePoint 中的含义不一定与在 .NET 应用程序中的含义相同。
    • 在 SharePoint 中,如果用户至少拥有资源拥有的一项声明,则授予访问权限
    • 在 Windows Server 中,有一种称为 SDDL 的策略语言,它根据声明(关于来自 AD 的用户的声明和来自文件分类的文件的声明)定义允许的内容
    • 在 .NET 应用程序中,由开发人员决定他们如何处理声明。

另一方面,ABAC 是 XACML(可扩展访问控制标记语言)实现的模型。ABAC 和 XACML 定义了如何使用属性来定义授权。授权是使用基于属性的策略定义的。策略使用属性来定义什么是允许的,什么是拒绝的。

在 XACML 中,可以允许或拒绝什么总是很清楚的。政策是集中定义和维护的。XACML 还使用策略决策点和策略执行点的概念定义了一个标准体系结构(顺便说一句,这不是由 XACML 发明的)。

我建议您在此处阅读 ABAC 和 XACML:

干杯,大卫。