即使策略规则中缺少该属性,具有附加属性的 XACML 3.0 请求也匹配

Posted

技术标签:

【中文标题】即使策略规则中缺少该属性,具有附加属性的 XACML 3.0 请求也匹配【英文标题】:XACML 3.0 Request with additional Attribute is matching even that attribute is missing in the policy rule 【发布时间】:2016-07-30 18:36:01 【问题描述】:

我有一个这样定义的 XACML 3.0 策略:

<?xml version="1.0" encoding="UTF-8"?>
<Policy 
  xmlns="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17" 
  xmlns:xacml="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17 http://docs.oasis-open.org/xacml/3.0/xacml-core-v3-schema-wd-17.xsd" PolicyId="Proposal-Rules" RuleCombiningAlgId="urn:oasis:names:tc:xacml:1.0:rule-combining-algorithm:deny-overrides" Version="1.0">
  <Description>Policy for any proposal.</Description>
  <PolicyDefaults>
    <XPathVersion>http://www.w3.org/TR/1999/REC-xpath-19991116</XPathVersion>
  </PolicyDefaults>
  <Target />
  <Rule Effect="Permit" RuleId="ApproveProposalByDepartmentChair-Rule13a">
    <Description>"Department Chair" can "Approve" a "Whole Proposal" when ApprovedByDepartmentChair = READYFORAPPROVAL and where condition check all department chairs are not approved.</Description>
    <Target>
      <AnyOf>
        <AllOf>
          <Match MatchId="urn:oasis:names:tc:xacml:1.0:function:string-equal">
            <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">Department Chair</AttributeValue>
            <AttributeDesignator AttributeId="urn:oasis:names:tc:xacml:1.0:subject:position.title" Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false" />
          </Match>
          <Match MatchId="urn:oasis:names:tc:xacml:1.0:function:string-equal">
            <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">Whole Proposal</AttributeValue>
            <AttributeDesignator AttributeId="urn:oasis:names:tc:xacml:1.0:resource:proposal.section" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false" />
          </Match>
          <Match MatchId="urn:oasis:names:tc:xacml:1.0:function:string-equal">
            <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">READYFORAPPROVAL</AttributeValue>
            <AttributeDesignator AttributeId="urn:oasis:names:tc:xacml:1.0:resource:ApprovedByDepartmentChair" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false" />
          </Match>
          <Match MatchId="urn:oasis:names:tc:xacml:1.0:function:string-equal">
            <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">Approve</AttributeValue>
            <AttributeDesignator AttributeId="urn:oasis:names:tc:xacml:1.0:action:proposal.action" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:action" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false" />
          </Match>
        </AllOf>
      </AnyOf>
    </Target>
    <Condition>
      <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:boolean-equal">
        <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:boolean-one-and-only">
          <AttributeSelector MustBePresent="false" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" Path="//ak:signedByAllChairs/text()" DataType="http://www.w3.org/2001/XMLSchema#boolean"/>
        </Apply>
        <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#boolean">false</AttributeValue>
      </Apply>
    </Condition>
  </Rule>
</Policy>

我的 XACML 请求看起来像这样,带有一个包含值“计算机工程”的额外 AttributeId="group"。

<Request xmlns="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17" CombinedDecision="false" ReturnPolicyIdList="false">
                <Attributes Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject">
                    <Attribute AttributeId="urn:oasis:names:tc:xacml:1.0:subject:position.title" IncludeInResult="false">
                        <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">Department Chair</AttributeValue>
                    </Attribute>
                    <Attribute AttributeId="urn:oasis:names:tc:xacml:1.0:subject:group" IncludeInResult="false">
                        <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">Computer Engineering</AttributeValue>
                    </Attribute>
                </Attributes>
                <Attributes Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource">
                    <Content>
                        <record xmlns:ak="http://akpower.org">
                            <proposal>  
                                <signedByAllChairs>false</signedByAllChairs>
                            </proposal>
                        </record>
                    </Content>
                    <Attribute AttributeId="urn:oasis:names:tc:xacml:3.0:content-selector" IncludeInResult="false">
                        <AttributeValue XPathCategory="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" DataType="urn:oasis:names:tc:xacml:3.0:data-type:xpathExpression">//ak:record/ak:proposal</AttributeValue>
                    </Attribute>
                    <Attribute AttributeId="urn:oasis:names:tc:xacml:1.0:resource:ApprovedByDepartmentChair" IncludeInResult="false">
                        <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">READYFORAPPROVAL</AttributeValue>
                    </Attribute>
                    <Attribute AttributeId="urn:oasis:names:tc:xacml:1.0:resource:proposal.section" IncludeInResult="false">
                        <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">Whole Proposal</AttributeValue>
                    </Attribute>
                </Attributes>
                <Attributes Category="urn:oasis:names:tc:xacml:3.0:attribute-category:action">
                    <Attribute AttributeId="urn:oasis:names:tc:xacml:1.0:action:proposal.action" IncludeInResult="false">
                        <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">Approve</AttributeValue>
                    </Attribute>
                </Attributes>
    </Request>

我希望 PEP 能够返回 NotApplicable 但相反它返回以下响应:with PERMIT 即使定义的策略规则不包含任何称为“组”的属性作为规则目标,而请求正在发送值为“计算机工程”的“组”属性,甚至它正在返回匹配和许可响应!

<Response xmlns="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17">
    <Result>
        <Decision>Permit</Decision>
        <Status>
            <StatusCode Value="urn:oasis:names:tc:xacml:1.0:status:ok" />
        </Status>       
    </Result>
</Response>

我有什么遗漏吗?我想不通。我目前正在使用 Balana 作为我的应用程序的 PEP 实现。

【问题讨论】:

您只包含了规则。你有完整的政策吗? 顺便说一句,您的 sn-p 缺少一个结束 元素 并且需要为前缀ak定义命名空间 嗨@DavidBrossard 我更新了整个政策的所有细节供您参考。我担心的是为什么具有 2 个主题属性的请求即使只存在一个有效主题也没有得到验证,使得规则返回 PERMIT 而它应该返回 NotApplicable 响应 您的 XACML 实际上充满了错误。你是用 WSO2 IS 写的吗?例如,这不能是布尔值...w3.org/2001/XMLSchema#boolean" /> 【参考方案1】:

我现在已成功将您的策略​​导入 Axiomatics Policy Administration Point。

基本问题

你有几个错误:

    您的 XPath 表达式使用前缀 ak: (Path="//ak:signedByAllChairs/text()"),但 XPath 不包含 ak 的定义: AttributeSelector 被标记为布尔值,但 XPath 中的 text() 返回的是字符串,而不是布尔值。您需要更改为字符串。 XACML 请求&lt;Content/&gt; 的 XML sn-p 部分实际上并未使用 ak: 前缀。它确实使用该前缀定义了一个命名空间,但从不使用它。

在 APS 中的策略表示

模拟策略

我模拟了您的政策,但没有取回许可证。我不确定。这是评估跟踪。 WSO2 IS 一定有问题,或者您忘记部署新策略。

现在,如果我清理您发送的 XML 以得到以下内容:

<record xmlns:ak="http://akpower.org">
    <proposal>                  
        <signedByAllChairs>false</signedByAllChairs>                    
    </proposal>
</record>

然后我从政策中获得许可。

【讨论】:

:请阅读我对您提到的问题 1 和 3 的说明:我已经包含 xmlns:ak 作为在 您能否使用修改后的策略重新运行模拟(在问题中更新,删除了空格)。实际上,我认为结果必须是不确定的,因为请求具有附加的 group 属性,该属性在策略中的任何规则中都不匹配。

以上是关于即使策略规则中缺少该属性,具有附加属性的 XACML 3.0 请求也匹配的主要内容,如果未能解决你的问题,请参考以下文章

具有依赖属性绑定到 DockPanel.Dock 附加属性的 WPF 自定义控件不起作用

如何将 onchange 事件附加到 CheckBoxList?缺少输入属性?

具有渲染属性的jsf组件验证失败

反对 js:无法使用连接表额外属性更新多对多关系。说附加属性无效

VS2017缺少文件

Fluent NHibernate:如何在关系表上映射具有附加属性的多对多关系?