REST API GET集合调用的记录级别访问控制

时间:2018-07-05 21:56:31

标签: rest rbac abac role-base-authorization

因此,我正在进行下一个需要更详细的访问控制功能的项目(即Sally只能查看其部门的产品)。

我了解了基于角色的访问控制模型或属性访问控制模型如何“包装” API调用以确定给定用户是否可以对给定对象执行上述操作。

当您处理返回记录集合的GET调用时,我总是会卡住。如果我从该端点向API请求20条记录的页面,我将无法获得20条记录,然后在返回这些记录之前对这些记录运行基于代码的授权检查,因为我很可能不会返回20条记录。

似乎授权检查必须在数据库中关闭和/或在数据库查询之前进行,方法是在查询调用中添加其他过滤器(即在产品部门=服装的地方也进行过滤)。

任何人都有更具体的实现示例或想法,如何以高效的方式实现它?

1 个答案:

答案 0 :(得分:2)

正如David提到的,XACML可以在数据库级别用于过滤。

为数据库实现XACML

下图是针对SQL的,但可以用作任何数据库技术的一般示例。

Example diagram for SQL database dynamic authorization

让我们看看它是如何工作的:

  1. SQL语句被拦截。
  2. 查询将发送到实现XACML的外部授权服务
  3. 授权引擎(PDP)评估以XACML或ALFA(XACML的实现)编写的相关策略。
  4. 它可能会查询外部属性源(PIP)以获取更多信息。
  5. 结果:SQL语句被动态修改以仅检索用户的授权数据。

如何在应用程序中使用

您选择使用的XACML的实现理想情况下将使用您选择的语言提供一个SDK或支持XACML REST概要文件。无论哪种都可以集成到您的应用程序中。

鉴于您正在使用REST调用,我认为您不必添加太多代码即可将您的应用程序与XACML实现集成在一起。

为API网关实现XACML

此集成中使用的原理是API网关对第三方服务进行标注的能力。

在这种情况下,第三方服务是您的XACML实现的策略决策点(PDP)。该实现必须支持REST / JSON。

API网关配置为向PDP发送细粒度的授权请求。

使用PDP公开的REST / JSON接口发出请求。然后,PDP返回响应。

XACML的JSON概要文件扩展了Request / Response模式,从而允许请求和响应都以JSON编码,而不是传统的XML编码。这使得“请求”和“响应”更易于阅读,并且尺寸也更小,因此传输的数据更少。

XACML的实现

有关XACML实现的完整列表,请you can check this list on Wikipedia

全面披露-我与David Brossard一起为Axiomatics工作,他设计了XACML的JSON概要文件以与REST概要文件结合使用。

Axiomatics为关系数据库提供了Axiomatics Data Access Filter,为 HADOOP 提供了SmartGuard。 Axiomatics Policy Server本机支持JSON和REST配置文件。