2015-09-01 21 views
1

我试图构建一个策略,该请求将从请求中接收属性和属性列表,检查单个属性在列表中并且基于该列表进行许可。我仍然是一个新手,所以我可能忽略了一些东西。WSO2 Identity Server XACML请求结果不确定/找不到AttributeDesignator属性(如果启用了多个策略)

我想到的是XACML type for bags的稍微修改版本。

当使用WSO2 TryIt工具自行评估时,结果为许可证。如果这是服务器上唯一启用的策略,则会发生同样的事情。如果我启用了其他策略,它会以“不确定/无法找到AttributeDesignator”属性进行响应。

当我发出碰到其他策略的请求时,也不会发生这种情况。其他政策返回预期结果,但没有包含列表。

为什么它会这样做,我该如何缓解它呢?

政策:

<xacml3:Policy xmlns:xacml3="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17" PolicyId="county-based-3" RuleCombiningAlgId="urn:oasis:names:tc:xacml:1.0:rule-combining-algorithm:first-applicable" Version="1.0"> 
    <xacml3:Description></xacml3:Description> 
    <xacml3:Target> 
     <xacml3:AnyOf> 
     <xacml3:AllOf> 
      <xacml3:Match MatchId="urn:oasis:names:tc:xacml:1.0:function:string-equal"> 
       <xacml3:AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">bay</xacml3:AttributeValue> 
       <xacml3:AttributeDesignator AttributeId="urn:oasis:names:tc:xacml:1.0:action:action-id" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:action" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="true"></xacml3:AttributeDesignator> 
      </xacml3:Match> 
     </xacml3:AllOf> 
     </xacml3:AnyOf> 
    </xacml3:Target> 
    <xacml3:Rule Effect="Permit" RuleId="http://axiomatics.com/alfa/identifier/stackoverflow.example.checkGroup"> 
     <xacml3:Description></xacml3:Description> 
     <xacml3:Target></xacml3:Target> 
     <xacml3:Condition> 
     <xacml3:Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-at-least-one-member-of"> 
      <xacml3:AttributeDesignator AttributeId="test:xacml:1.0:county" DataType="http://www.w3.org/2001/XMLSchema#string" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" MustBePresent="false"></xacml3:AttributeDesignator> 
      <xacml3:AttributeDesignator AttributeId="test:xacml:1.0:counties" DataType="http://www.w3.org/2001/XMLSchema#string" Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject" MustBePresent="false"></xacml3:AttributeDesignator> 
     </xacml3:Apply> 
     </xacml3:Condition> 
    </xacml3:Rule> 
    <xacml3:Rule Effect="Deny" RuleId="deny-rule"></xacml3:Rule> 
</xacml3:Policy> 

请求与它去:

<Request xmlns="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17" CombinedDecision="false" ReturnPolicyIdList="true"> 
<Attributes Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource"> 
    <Attribute AttributeId="test:xacml:1.0:county" IncludeInResult="false"> 
     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">travis</AttributeValue> 
    </Attribute> 
</Attributes> 
<Attributes Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject"> 
    <Attribute AttributeId="test:xacml:1.0:counties" IncludeInResult="false"> 

     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">travis</AttributeValue> 
     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">brazoria</AttributeValue> 
     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">dallas</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:action-id" IncludeInResult="false"> 
      <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">bay</AttributeValue> 
     </Attribute> 
    </Attributes> 
</Request> 

不确定响应:

<Response xmlns="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17"> 
    <Result> 
     <Decision>Indeterminate</Decision> 
     <Status> 
      <StatusCode Value="urn:oasis:names:tc:xacml:1.0:status:processing-error"/> 
      <StatusMessage>Couldn't find AttributeDesignator attribute</StatusMessage> 
     </Status> 
    </Result> 
</Response> 

一个例子政策和要求,启用时,使服务器展示此问题:

<Policy xmlns="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17" PolicyId="TestingStuff" RuleCombiningAlgId="urn:oasis:names:tc:xacml:3.0:rule-combining-algorithm:deny-overrides" Version="1.0"> 
    <Target> 
     <AnyOf> 
      <AllOf> 
       <Match MatchId="urn:oasis:names:tc:xacml:1.0:function:string-regexp-match"> 
        <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">creaky</AttributeValue> 
        <AttributeDesignator AttributeId="urn:oasis:names:tc:xacml:1.0:resource:resource-id" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="true"/> 
       </Match> 
      </AllOf> 
     </AnyOf> 
    </Target> 
    <Rule Effect="Permit" RuleId="Stuff"> 
     <Target> 
      <AnyOf> 
       <AllOf> 
        <Match MatchId="urn:oasis:names:tc:xacml:1.0:function:string-equal"> 
         <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">grease</AttributeValue> 
         <AttributeDesignator AttributeId="urn:oasis:names:tc:xacml:1.0:action:action-id" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:action" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="true"/> 
        </Match> 
       </AllOf> 
       <AllOf> 
        <Match MatchId="urn:oasis:names:tc:xacml:1.0:function:string-equal"> 
         <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">break</AttributeValue> 
         <AttributeDesignator AttributeId="urn:oasis:names:tc:xacml:1.0:action:action-id" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:action" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="true"/> 
        </Match> 
       </AllOf> 
      </AnyOf> 
     </Target> 
     <Condition> 
      <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:or"> 
       <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 AttributeId="urn:oasis:names:tc:xacml:1.0:subject:subject-id" Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="true"/> 
        </Apply> 
        <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">someHuman</AttributeValue> 
       </Apply> 
       <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 AttributeId="urn:oasis:names:tc:xacml:1.0:subject:subject-id" Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="true"/> 
        </Apply> 
        <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">Martin</AttributeValue> 
       </Apply> 
      </Apply> 
     </Condition> 
     <AdviceExpressions> 
      <AdviceExpression AdviceId="role" AppliesTo="Permit"> 
       <AttributeAssignmentExpression AttributeId="role"> 
        <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">mechanic</AttributeValue> 
       </AttributeAssignmentExpression> 
      </AdviceExpression> 
     </AdviceExpressions> 
    </Rule> 
</Policy> 

请求:

<Request xmlns="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17" CombinedDecision="false" ReturnPolicyIdList="false"> 
    <Attributes Category="urn:oasis:names:tc:xacml:3.0:attribute-category:action"> 
     <Attribute AttributeId="urn:oasis:names:tc:xacml:1.0:action:action-id" IncludeInResult="false"> 
      <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">grease</AttributeValue> 
     </Attribute> 
    </Attributes> 
    <Attributes Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject"> 
     <Attribute AttributeId="urn:oasis:names:tc:xacml:1.0:subject:subject-id" IncludeInResult="false"> 
      <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">Martin</AttributeValue> 
     </Attribute> 
    </Attributes> 
    <Attributes Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource"> 
     <Attribute AttributeId="urn:oasis:names:tc:xacml:1.0:resource:resource-id" IncludeInResult="false"> 
      <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">creaky</AttributeValue> 
     </Attribute> 
    </Attributes> 
</Request> 

回答

1

这是奇怪确实如此。如果我将第一个策略导入Axiomatics策略创作工具(免责声明:我为Axiomatics工作)并使用模拟功能,我会按预期得到结果。

仿真结果表明,评价如下所示的路径:

enter image description here

我不知道为什么你看到你所描述的,在你身边的行为。我不确定的一件事就是当你说“如果我启用其他策略”时你的意思是否在第一个策略中引用了第二个策略?

+0

AFAIK我没有引用任何其他原来的政策。我的意思是启用其他策略,在WSO2中,您可以在发布PDP后启用/禁用PDP上的策略。 [WSO2启用禁用](http://i.imgur.com/Fvh3kRl.png)。 如果我启用其他政策,似乎他们与此相冲突,尽管我没有看到任何可能与之冲突的内容。目标不同,所有属性也不同。 – Dumitru

+0

哈,好的。我无法检查我身边的行为,对不起! –

+0

Axiomatics没有办法在PDP上推送多个策略? – Dumitru

相关问题