2

我们正在使用 WSO2 Identity Server 5.1.0 。

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

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

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

工厂1

|--区域1

     |--Unit1

|--区域2

     |--Unit2

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

我需要 XACML 策略的结构。

4

1 回答 1

0

您可以在AuthzForce等 XACML 实现中使用自定义 PIP(策略信息点,又名属性提供者)来实现这一点。我不太了解 WSO2,但根据文档,它也可以通过自定义 PIP进行扩展,所以我认为这应该可以解决问题。

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

您的自定义 PIP 的作用:当请求此自定义属性 id resource-id-parent时,PIP 从请求中获取属性resource-id的值,即“area2”或“unit2”,然后在您的数据库中的层次结构(或上面的所有值,如果您愿意)并将其作为包返回。然后,在 XACML 策略中,您可以在 Match 中使用 string-equal 或在 Condition 中使用 string-at-least-one-member-of 以将 AttributeDesignator 与“area2”匹配(请记住 AttributeDesignator 始终评估为袋子)。

于 2018-07-24T01:40:26.840 回答