【问题标题】:XACML Response is Not ApplicableXACML 响应不适用
【发布时间】:2018-01-29 09:32:19
【问题描述】:

您好,我正在尝试使用 XACML3,我发现当请求与条件匹配时,我得到的响应是许可。但是当它不适用时,我不适用而不是否认。我不确定这种行为是否正确。 我明白我可以用 deny-unless-permit 组合算法掩盖不适用的响应,但我不明白这种行为。

以下是我的政策

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<Policy xmlns="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" PolicyId="urn:oasis:names:tc:xacml:2.0:conformance-test:IIA1:policy"
    RuleCombiningAlgId="urn:oasis:names:tc:xacml:3.0:rule-combining-algorithm:deny-overrides"
    Version="1.0">
    <Target>
        <AnyOf>
            <AllOf>
                <Match MatchId="urn:oasis:names:tc:xacml:1.0:function:string-equal">
                    <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">MyApp</AttributeValue>
                    <AttributeDesignator
                        AttributeId="urn:oasis:names:tc:xacml:1.0:resource:resource-id"
                        DataType="http://www.w3.org/2001/XMLSchema#string"
                        Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource"
                        MustBePresent="true" />
                </Match>
            </AllOf>
        </AnyOf>
    </Target>
    <Rule Effect="Permit"
        RuleId="urn:oasis:names:tc:xacml:2.0:conformance-test:IIA1:rule">
        <Target />
        <Condition>
            <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:integer-equal">
                <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:integer-one-and-only">
                    <AttributeDesignator
                        AttributeId="urn:oasis:names:tc:xacml:2.0:conformance-test:age"
                        Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject"
                        DataType="http://www.w3.org/2001/XMLSchema#integer" MustBePresent="false" />
                </Apply>
                <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:integer-one-and-only">
                    <AttributeDesignator
                        AttributeId="urn:oasis:names:tc:xacml:2.0:conformance-test:age2"
                        Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject"
                        DataType="http://www.w3.org/2001/XMLSchema#integer" MustBePresent="false" />
                </Apply>

            </Apply>
        </Condition>
    </Rule>
</Policy>

这是我的请求,但我得到了不适用的响应

<?xml version="1.0" encoding="utf-8"?>
<Request  ReturnPolicyIdList="false" CombinedDecision="false" xmlns="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Attributes Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject">
    <Attribute IncludeInResult="false" AttributeId="urn:oasis:names:tc:xacml:2.0:conformance-test:age">
      <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#integer">45</AttributeValue>
    </Attribute>
    <Attribute IncludeInResult="false" AttributeId="urn:oasis:names:tc:xacml:2.0:conformance-test:age2">
      <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#integer">4</AttributeValue>
    </Attribute>
  </Attributes>
  <Attributes Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource">
    <Attribute IncludeInResult="false" AttributeId="urn:oasis:names:tc:xacml:1.0:resource:resource-id">
      <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">MyApp</AttributeValue>
    </Attribute>
  </Attributes>
</Request>

仅当年龄和年龄 2 匹配时,我才获得许可响应,否则响应不适用。不适用意味着没有找到匹配规则,但目标确实与resource-id 字符串成功匹配,那么为什么响应不适用?任何帮助表示赞赏。

【问题讨论】:

    标签: java xacml xacml3


    【解决方案1】:

    得到 NotApplicable 是正常反应。事实上,这可能是最常见的反应。

    XACML 在响应中定义了 4 个可能的决定:

    • 许可
    • 拒绝
    • 不适用
    • 不确定(我相信您以前见过。请参阅post

    第一次编写策略时,很容易点击 NotApplicable,因为它本质上意味着您的请求与策略不匹配。想象一下,您的保单是关于银行账户的,而您发送了一份关于健康记录的请求。你会得到 NotApplicable。

    有一些方法可以屏蔽 NotApplicable 并强制 PDP 返回 Permit 或 Deny。一种这样的方法是使用以下组合算法之一:

    • 允许-除非-拒绝
    • 除非允许,否则拒绝

    如果您的策略包含 3 条规则且其中没有一条适用,则该策略通常会返回 NotApplicable。使用前两种组合算法中的一种,您会得到 Permit 或 Deny。

    另一种选择是使用另一个规则作为包罗万象的规则,它将拒绝以前未处理的任何访问。在这种情况下,父母的组合算法需要首先适用。见下文。

    目标或条件?

    在 XACML 中,您可以使用 2 个关键元素来定义授权策略的范围(广义上):

    • a Target 元素:目标可以存在于 PolicySet、Policy 和 Rule 中。将它们用于与和/或/和结合的简单匹配逻辑,例如role=="manager" and age&gt;18
    • 条件元素:条件仅存在于规则元素中。它们可用于更高级的匹配,特别是比较 2 个属性,例如age&gt;ageLimit。您不能在 Target 中执行后者。

    要使规则适用,目标和条件(如果有)都必须评估为真。

    【讨论】:

    • 谢谢大卫,这提供了丰富的信息。我想知道Target在这里的作用是什么?我的理解是 Target 会检查规则/策略是否适用于它的评估,而 Condition 会使用各种规则进行实际评估。如果是这种情况,为什么即使 Target 匹配成功,我也会得到不适用的结果。
    • 查看更新的回复。不要忘记接受答案并投票,谢谢
    • 太棒了!请查看我们的 Axiomatics 博客了解更多信息
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多