【问题标题】:Record level access control for REST API GET Collection callREST API GET Collection 调用的记录级访问控制
【发布时间】:2018-07-05 21:56:31
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 通常使用一组单独的表来指定每个域对象和用户的角色和访问权限 (ACL)。通过面向方面的编程(AOP),通常可以从业务方法本身中提取此类检查,这些检查使用方法所需的适当要求进行注释,以便用户能够执行它。如果成功,则调用该方法,并且 AOP 逻辑可能会过滤掉任何不允许调用用户的域对象。
  • 虽然说得通,但也意味着当分页条件传入 DAO 时,它只返回符合条件的前 X 条记录。但是,在 AOP 过滤器完成其工作后,即使数据库中确实有 X 条记录与条件和身份验证检查匹配,返回的记录也可能少于 X 条。因此,查询运行后发生的 AOP 逻辑不起作用。
  • 最理想的版本是,如果您流式传输结果并在您有 n 个要返回的条目后停止。分页视图也不能保证您会看到每个条目一次。想象一下,如果在两个连续的页面请求期间插入或删除数据。这可能会影响显示项目的页面。它可能会在多个页面上显示相同的项目(取决于插入的频率)或根本不显示,因为删除了前一个项目,条目将从顶部移动下一页到当前页的底部。
  • 您可以使用 XACML 在 API 或 API 网关甚至数据库中进行数据级过滤...
  • David,我又在谷歌上搜索,但您有什么具体的资源可以推荐用于在数据库级别使用 XACML。到目前为止,我还没有在那个领域看到任何东西,我不想重新发明轮子。

标签: rest rbac abac role-base-authorization


【解决方案1】:

正如 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 会返回一个响应。

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

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 配置文件。

【讨论】:

  • 迈克尔,谢谢,这是有道理的。我怀疑必须在数据层发生一些事情来调整 SQL 语句的标准。上次我看 Axiomatics 时,它基本上是为企业使用定价的。小企业/创业版有前途吗?
  • 嗨,杰夫,没问题。我认为将此对话转移到电子邮件可能会很好,我可以帮助您获得您所要求的有关小型企业/初创版本的信息。请给我发一封电子邮件到 mgood@axiomatics.com 好吗?另外,如果我回答了您的 StackOverflow 问题,您会接受我的回答吗? :-)
猜你喜欢
  • 2020-05-11
  • 2018-05-14
  • 2015-03-04
  • 1970-01-01
  • 1970-01-01
  • 2020-02-06
  • 2015-04-23
  • 1970-01-01
  • 2014-11-11
相关资源
最近更新 更多