如何让AuthzForce返回所有Permit策略的Obligations数组?
如何让Authzforce返回多个Policy的Obligation?
可行。
你当前使用的策略合并算法urn:oasis:names:tc:xacml:3.0:policy-combining-algorithm:deny-unless-permit逻辑为:遍历PolicySet中的Policy,一旦找到第一个返回Permit的Policy,就立即终止后续Policy的评估,仅将该Policy的Obligation纳入最终结果,这就是你只拿到aaaaaaa的原因。
要获取两个Obligation,只需将PolicySet的PolicyCombiningAlgId替换为urn:oasis:names:tc:xacml:3.0:policy-combining-algorithm:permit-overrides。这个算法会评估所有Policy,只要有至少一个Policy返回Permit,整体决策即为Permit,并且会收集所有返回Permit的Policy的Obligation。
修改后的PolicySet示例:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <PolicySet xmlns="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17" PolicySetId="root" Version="1.0.77" PolicyCombiningAlgId="urn:oasis:names:tc:xacml:3.0:policy-combining-algorithm:permit-overrides"> <Target/> <Policy PolicyId="p1" Version="1.0" RuleCombiningAlgId="urn:oasis:names:tc:xacml:3.0:rule-combining-algorithm:deny-unless-permit"> <Target/> <Rule RuleId="B1" Effect="Permit"/> <ObligationExpressions> <ObligationExpression ObligationId="aaaaaaa" FulfillOn="Permit"> </ObligationExpression> </ObligationExpressions> </Policy> <Policy PolicyId="p2" Version="1.0" RuleCombiningAlgId="urn:oasis:names:tc:xacml:3.0:rule-combining-algorithm:deny-unless-permit"> <Target/> <Rule RuleId="B2" Effect="Permit"/> <ObligationExpressions> <ObligationExpression ObligationId="bbbb" FulfillOn="Permit"> </ObligationExpression> </ObligationExpressions> </Policy> </PolicySet>
修改后,你将得到包含两个Obligation的结果:
{ "Response": { "Result": { "Decision": "Permit", "Obligations": { "Obligation": [ { "@ObligationId": "aaaaaaa" }, { "@ObligationId": "bbbb" } ] } } } }
内容的提问来源于stack exchange,提问作者Joao Parente
相关产品推荐
相关产品推荐

