4

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

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

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

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

任何人有任何更具体的实现示例或想法如何以高性能方式实现?

4

1 回答 1

3

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

为数据库实现 XACML

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

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

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

XACML 的实现

有关 XACML 实现的完整列表,您可以在 Wikipedia 上查看此列表

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

Axiomatics为关系数据库提供Axiomatics 数据访问过滤器,为HADOOP提供SmartGuard。Axiomatics Policy Server 本身支持 JSON 和 REST 配置文件。

于 2018-07-06T20:08:22.770 回答