我试图根据Orion要保存的实体类型设置权限。由于权限与“端点”相关联,因此我尝试将其设置为端点/ entities?type = Truck(例如)。问题是它告诉我(通过PEP响应Keyrock)该应用程序中未授权用户。 我查看了数据库中的所有连接,对我来说,他似乎已被授权,具有他的角色,他的许可以及他所分配的组织,所有这些都在已创建的唯一应用程序内。
在本教程中,POST请求会出现类似的情况,但这是因为在消息正文中发送了实体类型。在GET的情况下,我看不到它很清楚,因为它放在URL中,但是尝试此操作无效。
是否有可能不应该这样做?应该如何创建这种类型的权限?
答案 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将匹配Truck
,Car
或{{ 1}}