0

想知道为什么在义务声明中的 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);
        }

您对此有何看法,这个逻辑是否正常工作?

4

1 回答 1

1

这是按规格。XACML 规范只允许在 Permit 或 Deny 中返回义务和建议。在制定策略时,您必须牢记这一点。见下文和这里

7.18 义务和建议

规则、策略或策略集可能包含一个或多个义务或建议表达式。当评估此类规则、策略或策略集时,应将义务或建议表达式分别评估为应将其传递到下一个评估级别(封闭或引用策略、策略集或授权决策)仅当正在评估的规则、策略或策略集的结果与义务的 FulfillOn 属性或通知的 ApplysTo 属性的值匹配时。如果具有匹配的 FulfillOn 或 AppliesTo 属性的义务或建议表达式中的任何属性分配表达式计算为“不确定”,则整个规则、策略或策略集应为“不确定”。如果 FulfillOn 或 AppliesTo 属性与组合算法或规则评估的结果不匹配,则义务或建议表达式中的任何不确定性都无效。作为此程序的结果,如果未对从中得出的规则、政策或政策集进行评估,或者如果其评估结果为“不确定”或“不适用”,则不会向 PEP 返回任何义务或建议,或如果评估规则、策略或策略集所产生的决定与评估封闭策略集所产生的决定不匹配。如果将 PDP 的评估视为规则、策略集和策略树,每个都返回“Permit”或“Deny”,那么 PDP 返回给 PEP 的一组义务和建议将仅包括与那些路径相关的义务和建议,其中每个评估级别的结果与 PDP 返回的结果相同。在任何缺乏确定性是不可接受的情况下,应使用确定性组合算法,例如有序拒绝覆盖。另见第 7.2 节。

允许关于 NotApplicable 的义务和建议会很混乱。想象一下以下策略结构:

  • PolicySet主策略
    • 政策允许经理查看文件+ NotApplicable 上的义务 A
    • 政策允许员工查看自己部门的文件+ NotApplicable 上的义务 B
    • 政策允许发布者查看和发布文件+ 许可义务 C

想象一下进来的请求是:

  • 请求:出版商 Alice 可以发布 doc #123 吗?

在您的世界中,响应将(可能)是:许可 + 义务 A、B、C

这真的没有任何意义。

于 2015-11-25T03:54:23.103 回答