例如,使用包含两个条件的AND函数的XACML之间的区别是什么。一个条件是时间范围1-6和日期相等23/07/2015
另一个XACML将有两个规则,一个规则是时间范围1-6,另一个规则日期等于23/07/2015。
我的意思是,他们是如何工作的?第一个,AND函数必须为true才能获得许可效果。 那第二个怎么样?只是检查这两个规则中的一个是否真实并给出许可效果,或者两个规则必须像第一个一样真实?
答案 0 :(得分:2)
首先,让我们退后一步,重温我们的记忆。 XACML中有3个结构元素:
PolicySet
,其中包含PolicySet
和Policy
元素Policy
,其中包含Rule
元素。Rule
包含所需效果(允许或拒绝)。 Rule
包含Target
元素和Condition
元素,用于定义规则何时适用。
Rule
仅在Target
和Condition
评估为真时才会应用并返回其效果,即Target
中的所有匹配都是正确的,如果全部Condition
的部分最终评估为True。
让我们举个例子:
ALFA中的代码是:
policy parent{
apply firstApplicable
rule example{
permit
condition currentTime>"13:00:00":time &&
currentTime<"18:00:00":time &&
currentDate=="2015-07-23":date
}
}
该规则仅适用且只有在条件中的所有匹配评估为真时才返回其效果,在这种情况下为许可。
如果我们使用2条规则来表达相同的逻辑怎么办?那么会发生什么?让我们将条件分为两个规则:
policy parent{
apply firstApplicable
rule checkTime{
permit
condition currentTime>"13:00:00":time &&
currentTime<"18:00:00":time
}
rule checkDate{
permit
condition currentDate=="2015-07-23":date
}
}
那会怎么样?结果不一样。事实上,如果政策有2个子规则,它如何确定要考虑哪个?这是combining algorithms介入的地方。在策略级别和策略集级别定义了组合算法。请参阅here for a full list and details。
在上面的示例中,我们使用
apply firstApplicable
这意味着如果规则说明了许可,那么第二个甚至不会被考虑进行评估。换句话说,不会检查日期约束。因此,2个规则的集合不等于我们写的原始条件。
我们仍然可以修改这两条规则,使它们按照条件的作用 - 或几乎可以。一种方法是转动支票并使规则为负值:如果时间超出1-6范围则拒绝。如果日期是&#34; 2015-07-23&#34;则拒绝。只有这样才能定义允许访问的许可规则。重新设计的示例变为ALFA:
policy parent{
apply firstApplicable
rule checkTime{
deny
condition currentTime<="13:00:00":time ||
currentTime>="18:00:00":time
}
rule checkDate{
deny
condition not(currentDate=="2015-07-23":date)
}
rule allowAccess{
permit
}
}
但最重要的是:你想表达什么?区分时间检查和日期检查是否重要?作为2条规则更有意义吗?单一规则?这完全取决于你。
要编辑示例政策,您可以下载ALFA plugin from here。
HTH