XACML:如何在多头列表中查找多头(列表包含)

XACML: how to find a long in a list of longs (list contains)

我正在尝试检查 XACML 策略。我的主题很长 (urn:ch:xxxx:attribute:subject:1.0:participantid) 我希望在长列表 (urn:ch:xxxx: attribute:resource:1.0:participantids) 在我的资源上下文中。我正在尝试使用函数 integer-is-in.

来做到这一点

到目前为止我已经尝试过:

<Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:integer-is-in">
  <SubjectAttributeDesignator AttributeId="urn:ch:xxxx:attribute:subject:1.0:participantid" DataType="http://www.w3.org/2001/XMLSchema#long" />
  <ResourceAttributeDesignator AttributeId="urn:ch:xxxx:attribute:resource:1.0:participantids" DataType="http://www.w3.org/2001/XMLSchema#long" />
</Apply>

我已经测试过了,效果很好。

<Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:integer-is-in">
  <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#long">9000501</AttributeValue>
  <ResourceAttributeDesignator AttributeId="urn:ch:xxxx:attribute:resource:1.0:participantids" DataType="http://www.w3.org/2001/XMLSchema#long" />
</Apply>

那么我应该如何传递 subject 属性才能使其起作用?还是函数 integer-is-in 方法不对?

此致

克里斯蒂亚诺

AttributeDesignator 在 XACML 中被认为是一个 bag,换句话说,它是 多值。因此,在应用 integer-is-in 之前,您必须对其应用 integer-one-and-only 函数,因为 integer-is- in 期望将单个值(如 AttributeValue)作为第一个参数。

此外,integer-is-ininteger-one-and-only 函数仅适用于 XACML 标准中的 integer 数据类型(来自 XML 模式),而不是 long。因此,您的第二个示例 运行良好 的事实告诉我您的 XACML 实现并非 100% XACML 兼容。

最后,您在这里使用的是 XACML 2.0 语法,我强烈建议升级到 fixes and enhances XACML 一般情况下的 XACML 3.0。在 XACML 3.0 中,修复看起来像这样:

<Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:integer-is-in">
    <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:integer-one-and-only">
        <AttributeDesignator AttributeId="urn:ch:xxxx:attribute:subject:1.0:participantid" Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject" DataType="http://www.w3.org/2001/XMLSchema#integer" MustBePresent="false" />
    </Apply>
    <AttributeDesignator AttributeId="urn:ch:xxxx:attribute:resource:1.0:participantids" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" DataType="http://www.w3.org/2001/XMLSchema#integer" MustBePresent="false" />
</Apply>