如何根据实体类型授予权限?

时间:2019-04-02 11:29:09

标签: fiware authzforce fiware-keyrock

我试图根据Orion要保存的实体类型设置权限。由于权限与“端点”相关联,因此我尝试将其设置为端点/ entities?type = Truck(例如)。问题是它告诉我(通过PEP响应Keyrock)该应用程序中未授权用户。 我查看了数据库中的所有连接,对我来说,他似乎已被授权,具有他的角色,他的许可以及他所分配的组织,所有这些都在已创建的唯一应用程序内。

在本教程中,POST请求会出现类似的情况,但这是因为在消息正文中发送了实体类型。在GET的情况下,我看不到它很清楚,因为它放在URL中,但是尝试此操作无效。

是否有可能不应该这样做?应该如何创建这种类型的权限?

1 个答案:

答案 0 :(得分:0)

为此使用Authzforce似乎有点过头,但是您可以使用 string-starts-with和一个string-at-least-one-member-of条件,例如:

<Target>
  <AnyOf>
     <AllOf>
        <Match MatchId="urn:oasis:names:tc:xacml:1.0:function:string-equal">
           <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">GET</AttributeValue>
           <AttributeDesignator 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" MustBePresent="true" />
       </Match>
    </AllOf>
  </AnyOf>
</Target>
 <Condition>
   <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-at-least-one-member-of">
      <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-bag">
         <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">/v2/entities?type=Car</AttributeValue>
         <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">/v2/entities?type=Truck</AttributeValue>
         <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">/v2/entities?type=Bicycle</AttributeValue>
      </Apply>
      <AttributeDesignator Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" AttributeId="urn:thales:xacml:2.0:resource:sub-resource-id" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="true" />
   </Apply>
</Condition>

<target>检查 GET HTTP动词,<condition>确保-资源URL将匹配TruckCar或{{ 1}}