匹配多个多值属性的评估

时间:2018-02-20 14:32:36

标签: authorization xacml abac xacml3 alfa

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>

2 个答案:

答案 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吗?”

评估政策的方式是每个匹配将一个接一个地独立处理:

  1. 至少有一个值等于经理吗?就在这里。第一场比赛是真的。
  2. 至少有一个价值等于销售额吗?就在这里。第二场比赛是真的。
  3. 有一个AllOf(或AnyOf)并不重要。每场比赛首先独立处理。规范很清楚。