1

XACML 3.0 规范规定,对于<Match>评估,“MatchId 函数应应用于从or 元素<AttributeValue>返回的包的每个元素之间。” 7.6 比赛评估<AttributeDesignator><AttributeSelector>

例如,如果属性 access-subject / subject-id 返回一个包含多个值的包,则应遍历这些成员,直到匹配函数返回 true。这是清楚而明显的。现在,如果<AllOf>元素<Match>在一致性测试中有两个 es IIA007Policy.xml(见下文)。它有一个Match访问主题/主题ID等于“Julius Hibbert”,访问主题/某些属性等于“猜我这个”。

现在假设在一个请求中,有两个属性有多个成员,现在应该如何评估匹配?属性 1 有包 [1, 2, 3],属性 2 有包 [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>
4

2 回答 2

2

不, Match 不适用于两个属性包的所有组合,因为它们具有不同AttributeId的 s。AMatch仅适用AttributeIdAttributeDesignator. 如果Match中的AttributeDesignator有AttributeId='attribute1',它只适用于属性'attribute1',不关心其他。然后,匹配总是评估为 True(当且仅当任何属性值匹配时)、False 或 Indeterminate。

然后,AllOf组合的只是Matches 返回的 Trues/Falses/Indeterminates。组合算法在 XACML 规范的第 7.7 节(目标评估)中定义。在表格中,True 表示“Match”,False 表示“No Match”(不要问我为什么他们不只说 True 或 False,我不是作者之一)。例如,如果所有 Matches 返回 True,则 AllOf 返回 True。但如果至少有一个 Match 返回 False,则 AllOf 返回 False。(而且你有 Indeterminate 的特殊情况。)所以你可能会理解这个组合实际上比你想象的更基本,我猜。

于 2018-02-21T21:42:24.720 回答
2

如果您有一项政策规定(使用 ALFA 表示法):

 policy example{
     target clause role == "manager" and department == "sales"
     apply firstApplicable
     rule allow{
         permit
     }
 }

如果您发送的请求包含 2 个角色值(“manager”和“employee”)和 3 个部门值(“sales”、“engineering”、“finance”),则响应将为 Permit。用简单的古英语来说,您的问题是“碰巧是经理和员工以及属于销售、工程和财务部门的用户可以做 X 吗?”

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

  1. 是否至少有一个值等于 manager ?就在这里。第一场比赛是真的。
  2. 是否至少有一个价值等于销售额?就在这里。第二场比赛是真的。

存在 AllOf(或 AnyOf)并不重要。每场比赛首先独立处理。规范对此非常清楚。

于 2018-02-22T17:20:31.470 回答