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

Record level access control for REST API GET Collection call

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

我知道基于角色的访问控制模型或属性访问控制模型如何可以 'wrap' 一个 API 调用来确定给定用户是否可以对给定对象执行所述操作。

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

似乎授权检查必须在数据库中关闭 and/or 通过向查询调用添加额外的过滤器(即也过滤产品部门 = 服装)发生在数据库查询之前。

有人有更具体的实施示例或想法如何以高效的方式实施吗?

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

为数据库实施 XACML

下图适用于 SQL,但可用作任何数据库技术的一般示例。

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

  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 然后 returns 响应。

XACML 的 JSON 配置文件扩展了 Request/Response 架构,允许以 JSON 而不是传统的 XML 编码对请求和响应进行编码。这使得 Request 和 Response 更容易阅读,而且体积更小,因此传输的数据更少。

XACML 的实现

对于完整的 XACML 实现列表,you can check this list on Wikipedia

完全公开 - 我和 David Brossard 一起为 Axiomatics 工作,他为 XACML 设计了 ​​JSON 配置文件以与 REST 配置文件结合使用。

Axiomatics 为 HADOOP 提供 Axiomatics Data Access Filter for relational databases and SmartGuard。 Axiomatics Policy Server 本机支持 JSON 和 REST 配置文件。