我正在尝试检查XACML策略。我在主题(urn:ch:xxxx:attribute:subject:1.0:participantid)中有一个很长的内容,希望在一个longs列表中找到(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>
所以我应该如何传递主题属性,使其起作用?还是函数integer-is-in是错误的方式?
问候
克里斯蒂亚诺
bag,换句话说,它是多值。因此,在应用integer-is-in之前,必须在其上应用integer-one-and-only函数,因为integer-is-in首先需要单个值(例如AttributeValue)。论点。
此外,integer-is-in
和integer-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>