XACML响应不适用

时间:2018-01-29 09:32:19

标签: java xacml xacml3

您好我正在尝试使用XACML3,并且我发现该请求在匹配条件时获得响应为Permit。但是当它不是我不适用而不是拒绝。我不确定行为是否正确。 我明白我可以用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匹配时,我才会获得Permit响应,否则响应不适用。不适用意味着没有找到匹配规则,但Target确实与resource-id字符串成功匹配,那么为什么响应不适用?任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

获取NotApplicable是正常的响应。事实上,它可能是最常见的反应。

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

  • 许可证
  • 拒绝
  • NotApplicable的
  • 不确定(我相信你以前见过。见post

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

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

  • 许可证-除非-否认
  • 否认-除非许可证

如果您的策略包含3条规则且不适用,则该策略通常会返回NotApplicable。使用前面两种组合算法之一,您将获得Permit或Deny。

另一个选择是使用另一个规则作为全能,拒绝任何先前未处理过的访问。在这种情况下,父组合算法需要首先适用。见下文。

Using a catch-all rule

目标或条件?

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

  • 目标元素:目标可以存在于PolicySet,Policy和Rule中。将它们用于简单匹配逻辑与和/或/和role=="manager" and age>18
  • 一个Condition元素:条件仅存在于Rule元素中。它们可用于更高级的匹配,特别是将2个属性比较在一起,例如age>ageLimit。你不能在Target中做后者。

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