1

您能否解释一下我如何使用提供的 XACML 列表中的转换函数来创建策略规则中的条件。比如那个函数。

urn:oasis:names:tc:xacml:3.0:function:integer-from-string

我正在使用 AuthzForce,我的ApplycontainsAttributeValueAttributeDesignator. 我的 PDP 请求仅包含字符串类型,我想在策略中所需的类型中进行转换。

我试图这样做,但我得到了error-message - policyset is invalid.

<Condition>
    <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:and">
        <Apply FunctionId="urn:oasis:names:tc:xacml:3.0:function:all-of">
            <Function FunctionId="urn:oasis:names:tc:xacml:1.0:function:integer-greater-than-or-equal"/>
            <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#integer">100</AttributeValue>
            <Apply FunctionId="urn:oasis:names:tc:xacml:3.0:function:integer-from-string">         
                <AttributeDesignator
                        Category="urn:oasis:names:tc:xacml:3.0:attribute-category:testvalue"
                        AttributeId="urn:oasis:names:tc:xacml:1.0:testvalue-category:strvalue"
                        DataType="http://www.w3.org/2001/XMLSchema#string"
                        MustBePresent="true"/>
            </Apply>
        </Apply>
    </Apply>
</Condition>
4

1 回答 1

1

如果您使用的是 AuthzForce(尤其是 authzforce 核心),完整的错误消息应提供有关策略的哪一部分无效的更多信息。无论如何,我至少看到一个问题(从 XACML 开始,这是一个非常常见的错误):anAttributeDesignator被视为值袋(即可能是多值的)。因此,您不能integer-from-string直接在其上应用该函数,因为它需要一个简单的字符串值作为输入,而不是 Bag。修复包括在第一个上应用 *-one-and-only函数之一(它将单值包转换为单个值)AttributeDesignator,具体取决于数据类型:

...
<Apply FunctionId="urn:oasis:names:tc:xacml:3.0:function:integer-from-string">
   <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-one-and-only">         
                <AttributeDesignator
                        Category="urn:oasis:names:tc:xacml:3.0:attribute-category:testvalue"
                        AttributeId="urn:oasis:names:tc:xacml:1.0:testvalue-category:strvalue"
                        DataType="http://www.w3.org/2001/XMLSchema#string"
                        MustBePresent="true"/>
            </Apply>
    </Apply>
...

更多信息

于 2022-02-03T14:49:30.697 回答