嗨,我正在用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>只有在年龄和age2匹配的情况下,我才能得到响应,否则不适用。不适用意味着没有找到匹配规则,但目标确实与resource-id字符串成功匹配,那么为什么响应不适用?任何帮助都是非常感谢的。
发布于 2018-01-29 18:31:46
获取NotApplicable是一种正常的响应。事实上,这可能是最常见的反应。
XACML在响应中定义了4个可能的决定:
在第一次编写策略时,很容易命中NotApplicable,因为它实际上意味着您的请求与策略不匹配。想象一下,您的政策是关于银行帐户的,并且您发送有关健康记录的请求。你会得到NotApplicable。
有一些方法可以掩盖NotApplicable,并强制PDP返回、许可或拒绝。其中一种方法是使用下列组合算法之一:
如果您的策略包含3个规则,但它们都不适用,策略通常会返回NotApplicable。使用前两种组合算法中的一种,您将获得许可或拒绝。
另一种选择是使用另一条规则作为捕获--所有这些规则将拒绝任何以前没有处理过的访问。在这种情况下,家长的组合算法需要首先适用。见下文。

目标还是条件?
在XACML中,有两个关键元素可用于定义授权策略的范围(广义而言):
role=="manager" and age>18相结合的简单匹配逻辑。age>ageLimit。不能在目标中执行后一项操作。要使规则适用,目标和条件(如果有的话)都必须计算为true。
https://stackoverflow.com/questions/48498090
复制相似问题