不知道为什么Obligations语句中的WSO2 Balana框架只接受“允许”或“拒绝”条件的fulfillOn参数,但忽略了“不适用”结果,这也可能对逻辑流程中的拦截和文档感兴趣协助策略调试过程。
在Balana ObligationExpression.java的源代码中,我们找到:
if("Permit".equals(effect)){
fulfillOn = Result.DECISION_PERMIT;
} else if("Deny".equals(effect)){
fulfillOn = Result.DECISION_DENY;
} else {
throw new ParsingException("Invalid FulfillOn : " + effect);
}
您对此有何看法,这种逻辑是否正常?
答案 0 :(得分:0)
这是按规格。 XACML规范仅允许在Permit或Deny中返回义务和建议。在构建策略时,您必须牢记这一点。见下文和here。
7.18义务和建议
规则,策略或策略集可能包含一个或多个义务或建议表达式。在评估此类规则,政策或政策集时,应将义务或建议表达式分别评估为义务或建议,并将其传递到下一级评估(附上或参考政策,政策集或授权决策)仅当被评估的规则,策略或策略集的结果与义务的FulfillOn属性或建议的AppliesTo属性的值匹配时。如果具有匹配的FulfillOn或AppliesTo属性的义务或建议表达式中的任何属性赋值表达式求值为“Indeterminate”,则整个规则,策略或策略集应为“Indeterminate”。如果FulfillOn或AppliesTo属性与组合算法或规则评估的结果不匹配,则义务或建议表达式中的任何不确定都不起作用。 作为此程序的结果,如果未对其中提取的规则,政策或政策集进行评估,或者其评估结果为“不确定”,则不应向PEP返回任何义务或建议。或者" NotApplicable",或者,如果评估规则,策略或策略集所产生的决策与评估封闭策略集所产生的决策不匹配。 如果将PDP的评估视为规则,策略集和策略树,则每个规则都会返回" Permit"或者"拒绝"然后,PDP向PEP返回的义务和建议集将仅包括与那些路径相关的义务和建议,其中每个评估级别的结果与结果相同由PDP返回。在任何缺乏确定性是不可接受的情况下,应使用确定性组合算法,例如有序拒绝覆盖。 另见第7.2节。
承担义务&关于NotApplicable的建议会很混乱。想象一下以下政策结构:
想象一下,请求是:
在你的世界里,回应将是(可能):许可+义务A,B,C
它没有任何意义。