我试图弄清楚如何使用Balana的XACML实现来实现授权机制(WSO2&#39的权利引擎基于Balana)。
当用户请求访问单个资源时(例如,bob想要阅读医疗记录),事情很简单。
然而,让我们说鲍勃想读他所有的病人'病历。这里的第一个问题是需要有一种方法来弄清楚谁是他的病人。我还需要为他的病人获得属性。每个单独的记录。问题是,我试图将这种情况排除在外,同时将对我的PIP的属性请求数量保持在最低限度。
重新说明我的目标:我正在尝试根据PIP返回的属性来评估Bob是否可以访问多个医疗记录(创建决策请求时记录未知)(以及我希望我的PIP与数据库的交互尽可能少,例如)。
简而言之,我发现的是,当尝试使用XACML控制对资源集合的访问时,事情变得棘手。
我在这里找到了一些选择:
我的请求包含主题,操作,资源ID和范围。我使用XACML多决策配置文件:PDP知道子/后代资源是目标,因此它将为每个子/后代创建多个评估上下文(但尚未找到资源的属性)。然后,使用PIP,它将检索每个单独评估上下文的属性(例如,获取bob的医生ID,然后获取每个单独资源的医生ID)。例如,如果我的PIP正在查询数据库,它将针对每个单独的请求对每个单独的属性执行大量查询,因此会对性能产生严重影响。
我的请求包含主题,操作,资源ID。我不再使用多重决策配置文件。但是,在创建评估上下文并要求PDP评估我的请求之前,我知道我的资源实际上是一个集合,因此我以某种方式获取所有子项/后代及其所有属性,并且只有在获得所有这些信息后,我才能手动创建个人决策对每个子/后代的请求,以及其中所有相应属性的内容。因此,我给PDP提供了一个很胖的决策请求,其中包含几乎所有必要的属性。由于决策请求在评估上下文中几乎具有所有属性,因此不需要查询我的PIP。这里的优点是我在PDP评估决策之前获得了所有信息,因此PIP必须做的工作保持在最低限度。但是,我不确定我是否应该在到达PDP之前找到子/后代及其所有属性(在Context Handler中的某个地方,如XACML规范所述)。
我的请求包含主题,操作,资源ID。我使用多决策配置文件。我有一个组件可以找到儿童/后代资源,以及一些PIP。所有这些组件都使用存储库,假设称为MedicalRecordsRepository。请求子/后代ID时,此repo还从数据库获取所有属性,并将所有这些信息存储在缓存中。所以之后,当具有单独评估的多个评估上下文时,如果请求PIP返回属性,则它将从repo的缓存中获取该属性。因此,数据库交互保持在最低限度。但是,问题是存储库组件及其缓存。
我已阅读规格,我挖了一下,但我还没有找到解决这个问题的方法。有没有人有任何想法? 提前谢谢!
答案 0 :(得分:1)
简而言之,我发现在尝试使用XACML控制对资源集合的访问时,事情变得棘手。
你是对的。 XACML很好地解决了事务和功能访问控制。它不能很好地处理数据访问控制。
我不确定我是否完全掌握了你的三种方法,但你确实强调了相关问题,即
根据我的经验,当您处理数千个请求时,多个决策配置文件请求都能正常运行。除此之外,我会考虑Axiomatics Reverse Query(免责声明 - 我为Axiomatics工作)。反向查询通过公开API来解决您的问题,该API允许您提出开放式问题,例如
响应将是必须满足的条件集。例如,如果以下是您的政策(使用ALFA表示法):
Sub practiceSort()
Dim ws As Worksheet
Set ws = Sheets("sheet1")
ws.Range("A1:C10").Sort _
key1:=Range("B1:B10"), order1:=xlAscending, key2:=Range("C1:C10"), order2:=xlAscending
End Sub
policy accessMedicalRecord{
target clause com.axiomatics.examples.actionId == "view" and objectType == "medical record"
apply firstApplicable
/**
* Doctors can view medical records of patients they are assigned to
*/
rule allowRegularAccess{
target clause user.role == "doctor"
condition patient.assignedDoctor == user.identifier
permit
}
}
答案可以翻译成查询语言,例如SQL:
patient.assignedDoctor == "Alice"
它也可能是另一种查询语言。然后,您可以使用它来查询数据源,例如SQL数据库并检索相关的医疗记录。