将新的 XACML 请求添加到 Authzforce 时,HTTP 409 意味着什么
What does a HTTP 409 mean when adding a new XACML request to Authzforce
我正在测试 Authzforce 服务器应用程序以输入 XACML 策略并测试 XACML 决策请求。我正在尝试输入我的第一个 XACML 策略集。问题是我总是收到没有响应主体的 409 冲突响应,尽管当我通过 ID 和版本检索策略集时,它显然已成功保存在数据存储中。
这是我输入的策略集:
<PolicySet xmlns="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17" PolicySetId="PolicySetExample" Version="1.0" PolicyCombiningAlgId="identifier:policy-combining-algorithm:deny-overrides">
<Target/>
<Policy PolicyId="urn:oasis:names:tc:xacml:3.0:example:SimplePolicy1" Version="1.0" RuleCombiningAlgId="identifier:rule-combining-algorithm:deny-overrides">
<Target/>
<Rule RuleId="urn:oasis:names:tc:xacml:3.0:example:MyRule" Effect="Permit">
<Target>
<AnyOf>
<AllOf>
<Match MatchId="urn:oasis:names:tc:xacml:1.0:function:string-equal">
<AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">Medical record</AttributeValue>
<AttributeDesignator MustBePresent="false" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" AttributeId="urn:oasis:names:tc:xacml:1.0:resource:resource-id" DataType="http://www.w3.org/2001/XMLSchema#string"/>
</Match>
<Match MatchId="urn:oasis:names:tc:xacml:1.0:function:string-equal">
<AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">Doctor</AttributeValue>
<AttributeDesignator MustBePresent="false" Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject" AttributeId="urn:oasis:names:tc:xacml:1.0:subject:subject-id-qualifier" DataType="http://www.w3.org/2001/XMLSchema#string"/>
</Match>
</AllOf>
</AnyOf>
</Target>
<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:3.0:attribute-category:action" AttributeId="urn:oasis:names:tc:xacml:1.0:action:action-id" DataType="http://www.w3.org/2001/XMLSchema#string"/>
</Apply>
<AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">write</AttributeValue>
</Apply>
</Condition>
</Rule>
</Policy>
</PolicySet>
...使用服务端点 POST /domains/domain-id/pap/policies。
该服务以 409 响应,没有关于实际冲突的详细信息,但是当我尝试使用...
检索策略时
获取/domains/domain-id/pap/policies/PolicySetExample/1.0
...然后我看到策略集已被保存,我得到了策略集文档,其中的策略 ID 引用了名为 "ComplexPolicy":
的策略
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns4:PolicySet xmlns="http://authzforce.github.io/core/xmlns/pdp/6.0" xmlns:ns2="http://authzforce.github.io/rest-api-model/xmlns/authz/5" xmlns:ns3="http://authzforce.github.io/pap-dao-flat-file/xmlns/properties/3.6" xmlns:ns4="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17" xmlns:ns5="http://www.w3.org/2005/Atom" PolicySetId="PolicySetExample" Version="1.0" PolicyCombiningAlgId="urn:oasis:names:tc:xacml:3.0:policy-combining-algorithm:permit-overrides">
<ns4:Description>TestPolicySet</ns4:Description>
<ns4:Target>
<ns4:AnyOf>
<ns4:AllOf>
<ns4:Match MatchId="urn:oasis:names:tc:xacml:1.0:function:string-equal">
<ns4:AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">H1</ns4:AttributeValue>
<ns4:AttributeDesignator Category="urn:oasis:names:tc:xacml:3.0:attribute-category:environment" AttributeId="urn:oasis:names:tc:xacml:1.0:environment:environment-id" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="true"/>
</ns4:Match>
</ns4:AllOf>
</ns4:AnyOf>
</ns4:Target>
<ns4:PolicyIdReference>ComplexPolicy</ns4:PolicyIdReference>
</ns4:PolicySet>
我已经检查了 /var/log/tomcat8/authzforce-ce/error.log 中的 Authzforce 日志文件,但与此特定错误无关。
欢迎任何想法和指点。
编辑:是否与 Authzforce 的默认 "root" 策略集发生冲突?
谢谢,
安德拉斯
据我了解,您已经在版本“1.0”中成功地完成了 POST PolicySet 'PolicySetExample',因为这是您获得的版本GET .../PolicySetExample/1.0
。
现在您再次尝试 POST 版本“1.0”中的 PolicySet 'PolicySetExample'(但是是新内容),但失败了,因为 REST API 将其解释为尝试创建新的 PolicySet( PolicySet 资源)与另一个具有相同的 PolicySetId 和 Version,而 (PolicySetId,Version)
元组在域中应该是唯一的。因此,在您的情况下,很可能是 Version
冲突 。
2 个选项:
- 如果要replace/overwrite以前的PolicySet内容,用DELETE方法删除服务器上已有的
.../PolicySetExample/1.0
,然后用POST方法再次upload/createPolicySet .
- 如果要上传新版本(并在服务器上保留旧版本),请增加 Version 属性。请注意:a)您可以拥有多个版本的 PolicySet(我的意思是具有相同的 PolicySetId 但不同的 Version); b) 如果您在 PolicySetIdReference 中使用它,则 AuthzForce 始终默认使用最新版本,除非您明确指定版本(或根据 XACML 标准使用 EarliestVersion/LatestVersion,但我不建议使用它们)。
我正在测试 Authzforce 服务器应用程序以输入 XACML 策略并测试 XACML 决策请求。我正在尝试输入我的第一个 XACML 策略集。问题是我总是收到没有响应主体的 409 冲突响应,尽管当我通过 ID 和版本检索策略集时,它显然已成功保存在数据存储中。
这是我输入的策略集:
<PolicySet xmlns="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17" PolicySetId="PolicySetExample" Version="1.0" PolicyCombiningAlgId="identifier:policy-combining-algorithm:deny-overrides">
<Target/>
<Policy PolicyId="urn:oasis:names:tc:xacml:3.0:example:SimplePolicy1" Version="1.0" RuleCombiningAlgId="identifier:rule-combining-algorithm:deny-overrides">
<Target/>
<Rule RuleId="urn:oasis:names:tc:xacml:3.0:example:MyRule" Effect="Permit">
<Target>
<AnyOf>
<AllOf>
<Match MatchId="urn:oasis:names:tc:xacml:1.0:function:string-equal">
<AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">Medical record</AttributeValue>
<AttributeDesignator MustBePresent="false" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" AttributeId="urn:oasis:names:tc:xacml:1.0:resource:resource-id" DataType="http://www.w3.org/2001/XMLSchema#string"/>
</Match>
<Match MatchId="urn:oasis:names:tc:xacml:1.0:function:string-equal">
<AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">Doctor</AttributeValue>
<AttributeDesignator MustBePresent="false" Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject" AttributeId="urn:oasis:names:tc:xacml:1.0:subject:subject-id-qualifier" DataType="http://www.w3.org/2001/XMLSchema#string"/>
</Match>
</AllOf>
</AnyOf>
</Target>
<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:3.0:attribute-category:action" AttributeId="urn:oasis:names:tc:xacml:1.0:action:action-id" DataType="http://www.w3.org/2001/XMLSchema#string"/>
</Apply>
<AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">write</AttributeValue>
</Apply>
</Condition>
</Rule>
</Policy>
</PolicySet>
...使用服务端点 POST /domains/domain-id/pap/policies。 该服务以 409 响应,没有关于实际冲突的详细信息,但是当我尝试使用...
检索策略时获取/domains/domain-id/pap/policies/PolicySetExample/1.0
...然后我看到策略集已被保存,我得到了策略集文档,其中的策略 ID 引用了名为 "ComplexPolicy":
的策略<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns4:PolicySet xmlns="http://authzforce.github.io/core/xmlns/pdp/6.0" xmlns:ns2="http://authzforce.github.io/rest-api-model/xmlns/authz/5" xmlns:ns3="http://authzforce.github.io/pap-dao-flat-file/xmlns/properties/3.6" xmlns:ns4="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17" xmlns:ns5="http://www.w3.org/2005/Atom" PolicySetId="PolicySetExample" Version="1.0" PolicyCombiningAlgId="urn:oasis:names:tc:xacml:3.0:policy-combining-algorithm:permit-overrides">
<ns4:Description>TestPolicySet</ns4:Description>
<ns4:Target>
<ns4:AnyOf>
<ns4:AllOf>
<ns4:Match MatchId="urn:oasis:names:tc:xacml:1.0:function:string-equal">
<ns4:AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">H1</ns4:AttributeValue>
<ns4:AttributeDesignator Category="urn:oasis:names:tc:xacml:3.0:attribute-category:environment" AttributeId="urn:oasis:names:tc:xacml:1.0:environment:environment-id" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="true"/>
</ns4:Match>
</ns4:AllOf>
</ns4:AnyOf>
</ns4:Target>
<ns4:PolicyIdReference>ComplexPolicy</ns4:PolicyIdReference>
</ns4:PolicySet>
我已经检查了 /var/log/tomcat8/authzforce-ce/error.log 中的 Authzforce 日志文件,但与此特定错误无关。
欢迎任何想法和指点。
编辑:是否与 Authzforce 的默认 "root" 策略集发生冲突?
谢谢, 安德拉斯
据我了解,您已经在版本“1.0”中成功地完成了 POST PolicySet 'PolicySetExample',因为这是您获得的版本GET .../PolicySetExample/1.0
。
现在您再次尝试 POST 版本“1.0”中的 PolicySet 'PolicySetExample'(但是是新内容),但失败了,因为 REST API 将其解释为尝试创建新的 PolicySet( PolicySet 资源)与另一个具有相同的 PolicySetId 和 Version,而 (PolicySetId,Version)
元组在域中应该是唯一的。因此,在您的情况下,很可能是 Version
冲突 。
2 个选项:
- 如果要replace/overwrite以前的PolicySet内容,用DELETE方法删除服务器上已有的
.../PolicySetExample/1.0
,然后用POST方法再次upload/createPolicySet . - 如果要上传新版本(并在服务器上保留旧版本),请增加 Version 属性。请注意:a)您可以拥有多个版本的 PolicySet(我的意思是具有相同的 PolicySetId 但不同的 Version); b) 如果您在 PolicySetIdReference 中使用它,则 AuthzForce 始终默认使用最新版本,除非您明确指定版本(或根据 XACML 标准使用 EarliestVersion/LatestVersion,但我不建议使用它们)。