如何在 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。

例如,如果您有以下策略(与您的策略相同,但包含在 RulePolicy 中:

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 控制台打印的主要内容,如果未能解决你的问题,请参考以下文章

如何在 XACML 中添加字符串/URI 匹配

如何使用 Selenium WebDriver 和 Java 获得选定的选项

XACML 规则中如何使用 Fiware 服务和服务路径?

如何评估 XACML 策略

java如何调用本地打印机进行图片打印

如何在 XACML 策略中实现这些规则?