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

REST API GET集合调用的记录级访问控制,rest,rbac,abac,role-base-authorization,Rest,Rbac,Abac,Role Base Authorization,因此,我正在进行下一个项目,该项目需要更详细的访问控制功能(即Sally只能查看其部门的产品) 我了解了基于角色的访问控制模型或属性访问控制模型如何“包装”API调用,以确定给定用户是否可以对给定对象执行所述操作 当你处理一个返回一组记录的GET调用时,我总是被卡住。如果我要求API从该端点获取一个包含20条记录的页面,我无法获取20条记录,然后在返回这些记录之前对它们运行基于代码的授权检查,因为我很可能不会返回20条记录 似乎授权检查必须在数据库中关闭和/或在数据库查询之前进行,方法是向查询调

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

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

当你处理一个返回一组记录的GET调用时,我总是被卡住。如果我要求API从该端点获取一个包含20条记录的页面,我无法获取20条记录,然后在返回这些记录之前对它们运行基于代码的授权检查,因为我很可能不会返回20条记录

似乎授权检查必须在数据库中关闭和/或在数据库查询之前进行,方法是向查询调用添加其他筛选器(即,在product department=clothing的情况下也进行筛选器)


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

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

为数据库实现XACML 下图是针对SQL的,但可以用作任何数据库技术的通用示例

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

  • SQL语句被截获
  • 查询被发送到实现XACML的外部授权服务
  • 授权引擎(PDP)评估用XACML或ALFA(XACML的实现)编写的相关策略
  • 它可以查询外部属性源(PIP)以获取更多信息
  • 结果: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实现的完整列表

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


    Axiomatics为关系数据库HADOOP提供了支持。Axiomatics策略服务器本机支持JSON和REST配置文件。

    通常使用一组单独的表来指定每个域对象和用户的角色和访问权限()。通过面向方面编程(AOP),通常可以从业务方法本身中提取出这样的检查,这些检查用方法所需的支持需求进行注释,以便用户能够执行。如果成功,将调用该方法,AOP逻辑可能会过滤掉调用用户不允许的任何域对象。虽然这是有意义的,但也意味着当分页条件传递到DAO中时,它只返回与条件匹配的前X条记录。不过,在AOP筛选器完成其工作后,返回的记录可能少于X条,即使数据库中确实有X条符合条件和身份验证检查的记录。因此,在查询运行后发生的AOP逻辑不起作用。最理想的版本是,如果流式处理结果并在返回n个条目后停止。分页视图也不能保证每个条目都能看到一次。想象一下,如果在两个连续的页面请求期间插入或删除数据。这可能会影响显示项目的页面。它可能会在多个页面上显示相同的项目(取决于插入的频率),或者根本不显示,因为删除了前一个项目,条目将从下一页的顶部移动到当前页的底部。您可以使用XACML在API或API网关甚至数据库中进行数据级过滤…David,我再次在谷歌上搜索,但是您是否有任何特定的资源可以推荐在数据库级别使用XACML。到目前为止,我还没有在这方面看到任何东西,我宁愿不要重新发明轮子。迈克尔,谢谢,这是有道理的。我怀疑在数据层上一定发生了什么事情,从而影响了SQL语句的标准。上一次我看Axiomatics时,它的定价基本上只供企业使用。小企业/创业版有没有未来?嗨,杰夫,没问题。我认为将此对话转移到电子邮件中可能会很好,我可以帮助您获得有关小型企业/初创企业版本的信息。你能给我发封电子邮件吗mgood@axiomatics.com? 另外,如果我回答了你的问题,你能接受我的回答吗?:-)