XACML 3.0规范声明对<Match>
评估“匹配ID”
函数应该在<AttributeValue>
和每个之间应用
从<AttributeDesignator>
或者{。}返回的行李的元素
<AttributeSelector>
元素。“7.6 Match evaluation
例如,属性access-subject /
subject-id返回一个包含多个值的包,一个应该迭代
在这些成员之前,匹配函数返回true。这是
清楚而明显。现在,如果<AllOf>
元素有两个<Match>
es
在一致性测试中IIA007Policy.xml
(见下文)。它有一个Match
access-subject / subject-id等于“Julius Hibbert”和
access-subject / some-attribute等于“riddle me this”。
现在假设在一个请求中,有两个属性有多个成员,现在应该如何评估匹配? bag1有bag [1,2,3],attribute2有bag [a,b]。一罐
从第一个属性开始处理成员,直到true为止
返回并继续处理下一个属性等,但是
这不会涵盖所有可能的结果。或者,应该匹配
函数同时应用于成员的所有组合
从两个包[{1,a},{1,b},{2,a},{2,b},{3,a},{3,b}]
?对于大包和/或许多属性,这将导致大量组合处理!
据我所知,这些规格并不清楚如何处理这种情况
如果两个或多个属性返回包含多个成员的行李
在同一个<AllOf>
元素内。我的问题是:
<?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:IIA007:policy" RuleCombiningAlgId="urn:oasis:names:tc:xacml:3.0:rule-combining-algorithm:deny-overrides" Version="1.0" xsi:schemaLocation="urn:oasis:names:tc:xacml:3.0:policy:schema:os access_control-xacml-2.0-policy-schema-os.xsd">
<Description>
Policy for Conformance Test IIA007.
</Description>
<Target/>
<Rule Effect="Permit" RuleId="urn:oasis:names:tc:xacml:2.0:conformance-test:IIA007:rule">
<Description>
Julius Hibbert can read or write Bart Simpson's medical record.
</Description>
<Target>
<AnyOf>
<AllOf>
<Match MatchId="urn:oasis:names:tc:xacml:1.0:function:string-equal">
<AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">Julius Hibbert</AttributeValue>
<AttributeDesignator AttributeId="urn:oasis:names:tc:xacml:1.0:subject:subject-id" Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="true"/>
</Match>
<Match MatchId="urn:oasis:names:tc:xacml:1.0:function:string-equal">
<AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">riddle me this</AttributeValue>
<AttributeDesignator AttributeId="urn:oasis:names:tc:xacml:2.0:conformance-test:some-attribute" Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="true"/>
</Match>
</AllOf>
</AnyOf>
<AnyOf>
<AllOf>
<Match MatchId="urn:oasis:names:tc:xacml:1.0:function:anyURI-equal">
<AttributeValue DataType="http://www.w3.org/2001/XMLSchema#anyURI">http://medico.com/record/patient/BartSimpson</AttributeValue>
<AttributeDesignator AttributeId="urn:oasis:names:tc:xacml:1.0:resource:resource-id" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" DataType="http://www.w3.org/2001/XMLSchema#anyURI" MustBePresent="true"/>
</Match>
</AllOf>
</AnyOf>
<AnyOf>
<AllOf>
<Match MatchId="urn:oasis:names:tc:xacml:1.0:function:string-equal">
<AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">read</AttributeValue>
<AttributeDesignator AttributeId="urn:oasis:names:tc:xacml:1.0:action:action-id" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:action" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="true"/>
</Match>
</AllOf>
<AllOf>
<Match MatchId="urn:oasis:names:tc:xacml:1.0:function:string-equal">
<AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">write</AttributeValue>
<AttributeDesignator AttributeId="urn:oasis:names:tc:xacml:1.0:action:action-id" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:action" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="true"/>
</Match>
</AllOf>
</AnyOf>
</Target>
</Rule>
</Policy>
答案 0 :(得分:2)
不,匹配不适用于两个属性包的所有组合,因为它们具有不同的AttributeId
s。 Match
仅适用于AttributeId
中指定的AttributeDesignator
(以及类别和数据类型以及可选的颁发者)。如果Match中的AttributeDesignator具有AttributeId =&#39; attribute1&#39;,它仅适用于属性&#39; attribute1&#39;,它不关心其他属性。然后,匹配始终计算为True(当且仅当任何属性值匹配时),或False或Indeterminate。
然后,AllOf
结合的只是Match
es返回的真实/谬误/不确定。组合算法在XACML规范的第7.7节(目标评估)中定义。在表格中,它表示&#34;匹配&#34;为了真实,和#34;没有匹配&#34;如果不这样做(不要问我为什么他们不能说是对或错,我不是作者之一)。因此,例如,如果所有匹配返回True,则AllOf返回True。但是如果至少有一个Match返回False,则AllOf返回False。 (并且你有Indeterminate的特殊情况。)所以你可能会明白,这个组合实际上比你的想法更基本,我想。
答案 1 :(得分:2)
如果您有一个声明的政策(使用ALFA表示法):
policy example{
target clause role == "manager" and department == "sales"
apply firstApplicable
rule allow{
permit
}
}
如果您发送的请求包含2个角色值(“经理”和“员工”)和3个部门值(“销售”,“工程”,“财务”),则响应将为“许可”。用普通的旧英语,你的问题是“碰巧是经理和员工,属于销售,工程和财务部门的用户能做X吗?”
评估政策的方式是每个匹配将一个接一个地独立处理:
有一个AllOf(或AnyOf)并不重要。每场比赛首先独立处理。规范很清楚。