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 中的一些内容:
- 在 Policy(Set)Defaults / XPathVersion 元素中指定 XPath 版本。我强烈推荐 XPath 2.0:
<PolicySetDefaults><XPathVersion>http://www.w3.org/TR/2007/REC-xpath20-20070123</XPathVersion></PolicySetDefaults>
- 使用
xmlns:md="..."
在 XPath 中为前缀 md
指定 XML 命名空间
- [更新 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>
帮助解决此类错误的故障排除提示:
- Quick-test 在推送到 AuthzForce 服务器之前使用 AuthzForce Core CLI 您的策略。 (在 PDP 配置中设置
xPathEnabled="true"
- pdp.xml
- 在这种情况下启用 XPath 支持。)
- 检查
/var/log/tomcat9
和 /var/log/tomcat9/authzforce-ce
中的日志
- 提高
/opt/authzforce-ce-server/conf/logback.xml
中的日志级别,尤其是名为 org.ow2.authzforce
. 的记录器
我正在使用 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 中的一些内容:
- 在 Policy(Set)Defaults / XPathVersion 元素中指定 XPath 版本。我强烈推荐 XPath 2.0:
<PolicySetDefaults><XPathVersion>http://www.w3.org/TR/2007/REC-xpath20-20070123</XPathVersion></PolicySetDefaults>
- 使用
xmlns:md="..."
在 XPath 中为前缀 - [更新 2022-03-14] 将 AttributeSelector 路径更改为
"/md:record/md:parentGuardian/md:parentGuardianId/text()"
(在最开始添加斜杠)或更简单的"//md:parentGuardianId/text()"
.
md
指定 XML 命名空间
这是固定的 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>
帮助解决此类错误的故障排除提示:
- Quick-test 在推送到 AuthzForce 服务器之前使用 AuthzForce Core CLI 您的策略。 (在 PDP 配置中设置
xPathEnabled="true"
-pdp.xml
- 在这种情况下启用 XPath 支持。) - 检查
/var/log/tomcat9
和/var/log/tomcat9/authzforce-ce
中的日志
- 提高
/opt/authzforce-ce-server/conf/logback.xml
中的日志级别,尤其是名为org.ow2.authzforce
. 的记录器