如何在 Java 中获得 XACML 控制台打印
Posted
技术标签:
【中文标题】如何在 Java 中获得 XACML 控制台打印【英文标题】:How can I get XACML Console prints in Java 【发布时间】:2015-07-14 20:47:34 【问题描述】:作为一个令人难以置信的新人,我正在研究xacml,并致力于制定一些政策。当然我遇到了问题,通常我会先将一些 print.ln 语句扔到 Java 中,以开始找出代码到达(或未到达)的位置,但我在 OASIS 文档中看不到任何内容用于打印输出或调试的 XACML。
所以,我想知道是否有办法做到这一点,或者我是否可以投入一些东西来弄清楚某些东西在策略/规则评估中的工作方式或原因。
具体问题是我从政策规则中获得了许可,它似乎将“P”评估为与“PI”相同,然后为其返回许可。
<Condition>
<Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:any-of">
<Function FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-equal" />
<AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">PI</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" />
</Apply>
</Condition>
我认为可能是 function:any-of 和 string-equal 函数导致它在这里评估真实条件,但我不确定。我正在与另一个人合作,他似乎坚持这不是问题,但我没有完整的代码可以解决。
但是,如果有办法打印出来,那就太好了,特别是因为我想知道在运行不同的算法时,我的评估结果是什么。
【问题讨论】:
【参考方案1】:您所追求的与 OASIS XACML 规范无关,而是与您使用的引擎有关。您必须告诉 Balana 打印报表/跟踪。 Axiomatics Policy Server 为您提供了这种可能性:您可以模拟评估并获得回溯,以显示发生了什么、得到了什么结果以及原因。
您的 sn-p 表示,如果urn:oasis:names:tc:xacml:1.0:subject:subject-id
至少有一个值(因为标志 MustBePresent
设置为 true)并且这些值之一必须等于 PI
,它将返回 true。
例如,如果您有以下策略(与您的策略相同,但包含在 Rule
和 Policy
中:
ALFA 表示法 (wikipedia)
namespace example
import Attributes.*
policy simpleCondition
apply firstApplicable
rule simpleCondition
condition "PI"==subjectId
permit
XACML 3.0 表示法
<?xml version="1.0" encoding="UTF-8"?>
<!--This file was generated by the ALFA Plugin for Eclipse from Axiomatics AB (http://www.axiomatics.com).
Any modification to this file will be lost upon recompilation of the source ALFA file-->
<xacml3:Policy xmlns:xacml3="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17"
PolicyId="http://axiomatics.com/alfa/identifier/example.simpleCondition"
RuleCombiningAlgId="urn:oasis:names:tc:xacml:1.0:rule-combining-algorithm:first-applicable"
Version="1.0">
<xacml3:Description />
<xacml3:PolicyDefaults>
<xacml3:XPathVersion>http://www.w3.org/TR/1999/REC-xpath-19991116</xacml3:XPathVersion>
</xacml3:PolicyDefaults>
<xacml3:Target />
<xacml3:Rule
Effect="Permit"
RuleId="http://axiomatics.com/alfa/identifier/example.simpleCondition.simpleCondition">
<xacml3:Description />
<xacml3:Target />
<xacml3:Condition>
<xacml3:Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:any-of">
<xacml3:Function FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-equal"/>
<xacml3:AttributeValue
DataType="http://www.w3.org/2001/XMLSchema#string">PI</xacml3:AttributeValue>
<xacml3:AttributeDesignator
AttributeId="urn:oasis:names:tc:xacml:1.0:subject:subject-id"
DataType="http://www.w3.org/2001/XMLSchema#string"
Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject"
MustBePresent="false"
/>
</xacml3:Apply>
</xacml3:Condition>
</xacml3:Rule>
</xacml3:Policy>
使用 Axiomatics Policy Administration Point (PAP) 测试策略
构建一个 XACML 请求来测试您的用例。
空 XACML 请求
<xacml-ctx:Request ReturnPolicyIdList="true" CombinedDecision="false" xmlns:xacml-ctx="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17">
<xacml-ctx:Attributes Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject" >
</xacml-ctx:Attributes>
<xacml-ctx:Attributes Category="urn:oasis:names:tc:xacml:3.0:attribute-category:environment" >
</xacml-ctx:Attributes>
<xacml-ctx:Attributes Category="urn:oasis:names:tc:xacml:3.0:attribute-category:action" >
</xacml-ctx:Attributes>
<xacml-ctx:Attributes Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" >
</xacml-ctx:Attributes>
<xacml-ctx:Attributes Category="http://axiomatics.com/xacml/attribute-category/none" >
</xacml-ctx:Attributes>
</xacml-ctx:Request>
由于MustBePresent
标志,此请求导致Indeterminate。
主题 ID 错误的 XACML 请求
<xacml-ctx:Request ReturnPolicyIdList="true" CombinedDecision="false" xmlns:xacml-ctx="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17">
<xacml-ctx:Attributes Category="http://axiomatics.com/xacml/attribute-category/none" >
</xacml-ctx:Attributes>
<xacml-ctx:Attributes Category="urn:oasis:names:tc:xacml:3.0:attribute-category:environment" >
</xacml-ctx:Attributes>
<xacml-ctx:Attributes Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" >
</xacml-ctx:Attributes>
<xacml-ctx:Attributes Category="urn:oasis:names:tc:xacml:3.0:attribute-category:action" >
</xacml-ctx:Attributes>
<xacml-ctx:Attributes Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject" >
<xacml-ctx:Attribute AttributeId="urn:oasis:names:tc:xacml:1.0:subject:subject-id" IncludeInResult="true">
<xacml-ctx:AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">Not PI</xacml-ctx:AttributeValue>
</xacml-ctx:Attribute>
</xacml-ctx:Attributes>
</xacml-ctx:Request>
此请求导致NotApplicable。
具有正确主题 ID、PI 的 XACML 请求
<xacml-ctx:Request ReturnPolicyIdList="true" CombinedDecision="false" xmlns:xacml-ctx="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17">
<xacml-ctx:Attributes Category="http://axiomatics.com/xacml/attribute-category/none" >
</xacml-ctx:Attributes>
<xacml-ctx:Attributes Category="urn:oasis:names:tc:xacml:3.0:attribute-category:environment" >
</xacml-ctx:Attributes>
<xacml-ctx:Attributes Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" >
</xacml-ctx:Attributes>
<xacml-ctx:Attributes Category="urn:oasis:names:tc:xacml:3.0:attribute-category:action" >
</xacml-ctx:Attributes>
<xacml-ctx:Attributes Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject" >
<xacml-ctx:Attribute AttributeId="urn:oasis:names:tc:xacml:1.0:subject:subject-id" IncludeInResult="true">
<xacml-ctx:AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">PI</xacml-ctx:AttributeValue>
</xacml-ctx:Attribute>
</xacml-ctx:Attributes>
</xacml-ctx:Request>
此请求导致许可。
这是 Axiomatics Policy Administration Point 中评估跟踪的样子:
【讨论】:
以上是关于如何在 Java 中获得 XACML 控制台打印的主要内容,如果未能解决你的问题,请参考以下文章