0

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

在本教程中,POST 请求会出现类似的情况,但这是因为在消息正文中发送了实体类型。在 GET 的情况下,我看不太清楚,因为它在 URL 中,但尝试这个并没有奏效。

有可能不应该以这种方式完成吗?应该如何创建这种类型的权限?

4

1 回答 1

0

为此使用 Authzforce 似乎有些矫枉过正,但您可以使用 string-starts-withstring-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 将匹配TruckCarBicycle

于 2019-05-10T12:41:43.593 回答