Authzforce - XACML 属性选择器

Authzforce - XACML AttributeSelector

我正在使用 Authzforce 10.1.1 并且我已经创建了一些基本策略,现在我正在尝试使用元素 <AttributeSelector> 来比较我计划根据请求发送的资源的某些值。

我一直在关注 http://docs.oasis-open.org/xacml/3.0/xacml-3.0-core-spec-os-en.pdf 中的 xacml 文档,甚至尝试了他们为 <AttributeSelector> 提供的一些示例,但没有成功。

我要创建的策略


<?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.5" PolicyCombiningAlgId="urn:oasis:names:tc:xacml:3.0:policy-combining-algorithm:deny-unless-permit">
   <Target />
   <Policy PolicyId="polo" Version="1.0" RuleCombiningAlgId="urn:oasis:names:tc:xacml:3.0:rule-combining-algorithm:deny-unless-permit">
       <Target>
       </Target>
       <Rule RuleId="Ruleo" Effect="Permit">
           <Condition>
               <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-equal">
                   <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-one-and-only">
                       <AttributeDesignator MustBePresent="false" Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject" AttributeId="urn:oasis:names:tc:xacml:3.0:example:attribute:parent-guardian-id" DataType="http://www.w3.org/2001/XMLSchema#string" />
                   </Apply>
                   <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-one-and-only">
                     <AttributeSelector MustBePresent="false"
                     Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource"
                     Path="md:record/md:parentGuardian/md:parentGuardianId/text()" DataType="http://www.w3.org/2001/XMLSchema#string" />
                   </Apply>
               </Apply>
           </Condition>
       </Rule>
   </Policy>
</PolicySet>

我收到错误

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<error xmlns:ns2="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17" xmlns:ns3="http://authzforce.github.io/core/xmlns/pdp/7">
   <message>Invalid PolicySet with PolicySetId='root', Version=1.0.5</message>
</error>

如果我将 <AttributeSelector> 替换为 <AttributeDesignator>,策略创建成功,所以我假设错误在 <AttributeSelector> 中,但从我读过的文档来看我可以'找不到错误。

确保您已启用 PDP 功能 urn:ow2:authzforce:feature:pdp:core:xpath-eval,如 documentation on PDP properties 中所述。

更新 2022-03-10

然后您需要修复 PolicySet 中的一些内容:

  1. 在 Policy(Set)Defaults / XPathVersion 元素中指定 XPath 版本。我强烈推荐 XPath 2.0: <PolicySetDefaults><XPathVersion>http://www.w3.org/TR/2007/REC-xpath20-20070123</XPathVersion></PolicySetDefaults>
  2. 使用 xmlns:md="..."
  3. 在 XPath 中为前缀 md 指定 XML 命名空间
  4. [更新 2022-03-14] 将 AttributeSelector 路径更改为 "/md:record/md:parentGuardian/md:parentGuardianId/text()"(在最开始添加斜杠)或更简单的 "//md:parentGuardianId/text()" .

这是固定的 PolicySet 的样子:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<PolicySet xmlns="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17" xmlns:md="urn:example:med:schemas:record" PolicySetId="root" Version="1.0.5" PolicyCombiningAlgId="urn:oasis:names:tc:xacml:3.0:policy-combining-algorithm:deny-unless-permit">
   <PolicySetDefaults>
       <XPathVersion>http://www.w3.org/TR/2007/REC-xpath20-20070123</XPathVersion>
   </PolicySetDefaults>
   <Target />
   <Policy PolicyId="polo" Version="1.0" RuleCombiningAlgId="urn:oasis:names:tc:xacml:3.0:rule-combining-algorithm:deny-unless-permit">
       <Target>
       </Target>
       <Rule RuleId="Ruleo" Effect="Permit">
           <Condition>
               <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-equal">
                   <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-one-and-only">
                       <AttributeDesignator MustBePresent="false" Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject" AttributeId="urn:oasis:names:tc:xacml:3.0:example:attribute:parent-guardian-id" DataType="http://www.w3.org/2001/XMLSchema#string" />
                   </Apply>
                   <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-one-and-only">
                     <AttributeSelector MustBePresent="false"
                     Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource"
                     Path="/md:record/md:parentGuardian/md:parentGuardianId/text()" DataType="http://www.w3.org/2001/XMLSchema#string" />
                   </Apply>
               </Apply>
           </Condition>
       </Rule>
   </Policy>
</PolicySet>

帮助解决此类错误的故障排除提示:

  1. Quick-test 在推送到 AuthzForce 服务器之前使用 AuthzForce Core CLI 您的策略。 (在 PDP 配置中设置 xPathEnabled="true" - pdp.xml - 在这种情况下启用 XPath 支持。)
  2. 检查 /var/log/tomcat9/var/log/tomcat9/authzforce-ce
  3. 中的日志
  4. 提高 /opt/authzforce-ce-server/conf/logback.xml 中的日志级别,尤其是名为 org.ow2.authzforce.
  5. 的记录器