因此,我正在进行下一个需要更详细的访问控制功能的项目(即Sally只能查看其部门的产品)。
我了解了基于角色的访问控制模型或属性访问控制模型如何“包装” API调用以确定给定用户是否可以对给定对象执行上述操作。
当您处理返回记录集合的GET调用时,我总是会卡住。如果我从该端点向API请求20条记录的页面,我将无法获得20条记录,然后在返回这些记录之前对这些记录运行基于代码的授权检查,因为我很可能不会返回20条记录。>
似乎授权检查必须在数据库中关闭和/或在数据库查询之前进行,方法是在查询调用中添加其他过滤器(即在产品部门=服装的地方也进行过滤)。
任何人都有更具体的实现示例或想法,如何以高效的方式实现它?
答案 0 :(得分:2)
正如David提到的,XACML可以在数据库级别用于过滤。
下图是针对SQL的,但可以用作任何数据库技术的一般示例。
让我们看看它是如何工作的:
您选择使用的XACML的实现理想情况下将使用您选择的语言提供一个SDK或支持XACML REST概要文件。无论哪种都可以集成到您的应用程序中。
鉴于您正在使用REST调用,我认为您不必添加太多代码即可将您的应用程序与XACML实现集成在一起。
此集成中使用的原理是API网关对第三方服务进行标注的能力。
在这种情况下,第三方服务是您的XACML实现的策略决策点(PDP)。该实现必须支持REST / JSON。
API网关配置为向PDP发送细粒度的授权请求。
使用PDP公开的REST / JSON接口发出请求。然后,PDP返回响应。
XACML的JSON概要文件扩展了Request / Response模式,从而允许请求和响应都以JSON编码,而不是传统的XML编码。这使得“请求”和“响应”更易于阅读,并且尺寸也更小,因此传输的数据更少。
有关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配置文件。