多个多值属性的匹配评估
match evaluation of multiple multi-valued attributes
XACML 3.0 规范声明 <Match>
评估“MatchId
函数应应用于 <AttributeValue>
和每个
return 从 <AttributeDesignator>
或
<AttributeSelector>
个元素。”7.6 Match evaluation
例如,属性 access-subject /
subject-id returns 一个包有多个值,一个应该迭代
遍历这些成员,直到匹配函数 return 为真。这是
清晰明显。现在如果 <AllOf>
元素有两个 <Match>
es 作为
在一致性测试中 IIA007Policy.xml
(见下文)。它有一个 Match
access-subject / subject-id 等于 "Julius Hibbert" 并且
access-subject / some-attribute 等于 "riddle me this".
现在假设在一个请求中,有两个具有多个成员的属性,现在应该如何评估匹配? Attribute1 有 bag [1, 2, 3],attribute2 有 bag [a, b]。一罐
从第一个属性开始处理成员,直到为真
returned 然后继续处理下一个属性等,但是
这不会涵盖所有可能的结果。或者,应该匹配
功能同时应用于成员的所有组合
来自两个袋子[{1,a},{1,b},{2,a},{2,b},{3,a},{3,b}]
?大包 and/or 许多属性,这将导致需要处理大量组合!
据我所知,规范没有给出如何处理这种情况的线索
如果两个或多个属性 return 袋子有多个成员
在同一个 <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>
不,匹配不适用于两个属性包的所有组合,因为它们具有不同的 AttributeId
。 Match
仅适用于 AttributeDesignator
中指定的 AttributeId
(以及类别和数据类型以及可选的颁发者)。如果Match中的AttributeDesignator有AttributeId='attribute1',则只适用于属性'attribute1',其他的不关心。然后,Match 始终评估为 True(当且仅当任何属性值匹配时)、False 或 Indeterminate。
那么,AllOf
合并的只是 Trues/Falses/Indeterminates return 由 Match
编辑的。组合算法在 XACML 规范的第 7.7 节(目标评估)中定义。在表格中,它表示 "Match" 表示 True,"No Match" 表示 False(不要问我为什么他们不直接说 True 或 False,我不是作者之一)。因此,例如,如果所有匹配 return 为真,则 AllOf return 为真。但如果至少有一个 Match returns False,则 AllOf returns False。 (而且你有 Indeterminate 的特殊情况。)所以你可能明白这个组合实际上比你想象的更基本,我猜。
如果您的政策声明(使用 ALFA 表示法):
policy example{
target clause role == "manager" and department == "sales"
apply firstApplicable
rule allow{
permit
}
}
如果您发送的请求包含 2 个角色值("manager" 和 "employee")和 3 个部门值("sales"、"engineering"、"finance"),则响应将是 Permit。用简单的古英语,你的问题是 "Can the user who happens to be a manager and an employee and who belongs to the sales, engineering, and finance departments do X?"
评估政策的方式是,每场比赛将一个接一个地独立处理:
- 是否至少有一个值等于经理?就在这里。第一个匹配为真。
- 是否至少有一个值等于销售额?就在这里。第二个匹配为真。
有AllOf(或AnyOf)并不重要。每场比赛首先独立处理。规范对此非常清楚。
XACML 3.0 规范声明 <Match>
评估“MatchId
函数应应用于 <AttributeValue>
和每个
return 从 <AttributeDesignator>
或
<AttributeSelector>
个元素。”7.6 Match evaluation
例如,属性 access-subject /
subject-id returns 一个包有多个值,一个应该迭代
遍历这些成员,直到匹配函数 return 为真。这是
清晰明显。现在如果 <AllOf>
元素有两个 <Match>
es 作为
在一致性测试中 IIA007Policy.xml
(见下文)。它有一个 Match
access-subject / subject-id 等于 "Julius Hibbert" 并且
access-subject / some-attribute 等于 "riddle me this".
现在假设在一个请求中,有两个具有多个成员的属性,现在应该如何评估匹配? Attribute1 有 bag [1, 2, 3],attribute2 有 bag [a, b]。一罐
从第一个属性开始处理成员,直到为真
returned 然后继续处理下一个属性等,但是
这不会涵盖所有可能的结果。或者,应该匹配
功能同时应用于成员的所有组合
来自两个袋子[{1,a},{1,b},{2,a},{2,b},{3,a},{3,b}]
?大包 and/or 许多属性,这将导致需要处理大量组合!
据我所知,规范没有给出如何处理这种情况的线索
如果两个或多个属性 return 袋子有多个成员
在同一个 <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>
不,匹配不适用于两个属性包的所有组合,因为它们具有不同的 AttributeId
。 Match
仅适用于 AttributeDesignator
中指定的 AttributeId
(以及类别和数据类型以及可选的颁发者)。如果Match中的AttributeDesignator有AttributeId='attribute1',则只适用于属性'attribute1',其他的不关心。然后,Match 始终评估为 True(当且仅当任何属性值匹配时)、False 或 Indeterminate。
那么,AllOf
合并的只是 Trues/Falses/Indeterminates return 由 Match
编辑的。组合算法在 XACML 规范的第 7.7 节(目标评估)中定义。在表格中,它表示 "Match" 表示 True,"No Match" 表示 False(不要问我为什么他们不直接说 True 或 False,我不是作者之一)。因此,例如,如果所有匹配 return 为真,则 AllOf return 为真。但如果至少有一个 Match returns False,则 AllOf returns False。 (而且你有 Indeterminate 的特殊情况。)所以你可能明白这个组合实际上比你想象的更基本,我猜。
如果您的政策声明(使用 ALFA 表示法):
policy example{
target clause role == "manager" and department == "sales"
apply firstApplicable
rule allow{
permit
}
}
如果您发送的请求包含 2 个角色值("manager" 和 "employee")和 3 个部门值("sales"、"engineering"、"finance"),则响应将是 Permit。用简单的古英语,你的问题是 "Can the user who happens to be a manager and an employee and who belongs to the sales, engineering, and finance departments do X?"
评估政策的方式是,每场比赛将一个接一个地独立处理:
- 是否至少有一个值等于经理?就在这里。第一个匹配为真。
- 是否至少有一个值等于销售额?就在这里。第二个匹配为真。
有AllOf(或AnyOf)并不重要。每场比赛首先独立处理。规范对此非常清楚。