即使策略规则中缺少该属性,具有附加属性的 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 缺少一个结束我现在已成功将您的策略导入 Axiomatics Policy Administration Point。
基本问题
你有几个错误:
-
您的 XPath 表达式使用前缀
ak:
(Path="//ak:signedByAllChairs/text()"
),但 XPath 不包含 ak 的定义:
AttributeSelector 被标记为布尔值,但 XPath 中的 text() 返回的是字符串,而不是布尔值。您需要更改为字符串。
XACML 请求<Content/>
的 XML sn-p 部分实际上并未使用 ak: 前缀。它确实使用该前缀定义了一个命名空间,但从不使用它。
在 APS 中的策略表示
模拟策略
我模拟了您的政策,但没有取回许可证。我不确定。这是评估跟踪。 WSO2 IS 一定有问题,或者您忘记部署新策略。
现在,如果我清理您发送的 XML 以得到以下内容:
<record xmlns:ak="http://akpower.org">
<proposal>
<signedByAllChairs>false</signedByAllChairs>
</proposal>
</record>
然后我从政策中获得许可。
【讨论】:
:请阅读我对您提到的问题 1 和 3 的说明:我已经包含 xmlns:ak 作为在以上是关于即使策略规则中缺少该属性,具有附加属性的 XACML 3.0 请求也匹配的主要内容,如果未能解决你的问题,请参考以下文章
具有依赖属性绑定到 DockPanel.Dock 附加属性的 WPF 自定义控件不起作用
如何将 onchange 事件附加到 CheckBoxList?缺少输入属性?