XACML策略中的分层属性

时间:2016-06-21 12:29:35

标签: authorization wso2is access-control xacml abac

我们正在使用WSO2 Identity Server 5.1.0。

我们有一个位置层次结构,如Plant1-> Area1-> unit1。现在,如果用户具有Plant1的属性,他也应该访问unit1(树中父项的所有子项)。

我们可以在XACML中指定吗?我们将层次结构存储在DB中。如果需要,我们也可以提供分层元素列表作为属性列表。

示例中解释的问题: 用户bob已被授予访问area2的权限,如下所示:

Plant1

| --Area1

     |--Unit1

| --Area2

     |--Unit2

我们想在XACML策略中指定Area2位置。现在,如果带有area2或unit2的请求应该被允许,而如果带有plant1,area1或unit1的请求出现,则应该被拒绝。

我需要XACML策略的结构。

1 个答案:

答案 0 :(得分:0)

您可以在AuthzForce之类的XACML实现中使用自定义的PIP(策略信息点,又称为属性提供程序)来实现此目标。我不太了解WSO2,但是根据文档,它可以通过custom PIPs进行扩展,所以我认为这应该可以解决问题。

想法是,在XACML策略中,您使用带有自定义AttributeId的AttributeDesignator来指示请求某个属性的层次结构中的顶级父值,例如AttributeId = resource-id-parent 表示 resource-id 属性值的父值。

自定义PIP的功能:当请求此自定义属性ID resource-id-parent 时,PIP从请求中获取属性 resource-id 的值,即“ area2”或“ unit2”,然后从您的数据库中获取层次结构中的相应最高值(或者,如果需要,则获取上述所有值),并将其作为bag返回。然后,在XACML策略中,您可以在Match中使用字符串等于或在条件中使用字符串至少为一的成员,以将AttributeDesignator与“ area2”进行匹配(请记住AttributeDesignator始终评估为袋子)。