Authorization 在哪里根据PDP上的属性提供程序对XACML请求的属性进行双重检查?

Authorization 在哪里根据PDP上的属性提供程序对XACML请求的属性进行双重检查?,authorization,xacml,abac,pdp,authzforce,Authorization,Xacml,Abac,Pdp,Authzforce,我正在评估PDP引擎,目前我正在尝试。到目前为止,PDP对请求的评估非常可靠: //我的请求和pdp配置文件 文件冲突=新文件(“D:/docs/XACML/AuthZForce/IIA001/pdp.xml”)//xml告诉pdp策略xml文件的位置 File requestFile=新文件(“D:/docs/XACML/AuthZForce/ia001/Request.xml”); //我实例化了pdp引擎和xacml解析器 final PdpEngineConfiguration pdp

我正在评估PDP引擎,目前我正在尝试。到目前为止,PDP对请求的评估非常可靠:

//我的请求和pdp配置文件
文件冲突=新文件(“D:/docs/XACML/AuthZForce/IIA001/pdp.xml”)//xml告诉pdp策略xml文件的位置
File requestFile=新文件(“D:/docs/XACML/AuthZForce/ia001/Request.xml”);
//我实例化了pdp引擎和xacml解析器
final PdpEngineConfiguration pdpEngineConf=PdpEngineConfiguration.getInstance(confLocation,null,null);
PdpEngineInoutAdapter pdp=PdpEngineAdapters.newXacmlJaxbInoutAdapter(pdpEngineConf);
XmlUtils.XmlnsFilteringParser xacmlParserFactory=XacmlJaxbParsingUtils.getXacmlParserFactory(false).getInstance();
//我解析请求文件
objectrequest=xacmlParserFactory.parse(requestFile.toURI().toURL());
if(请求实例of request){
//此时,我可以访问所有请求属性或修改它们
//我让PDP评估请求
响应=pdp.评估((请求)请求);
//我检查响应中的结果
for(结果:response.getResults()){
if(result.getDecision()==DecisionType.PERMIT){
//这是允许的!
}否则{
//否认!
}
}
}
现在,根据文献,我不应该信任给定请求xacml文件中的属性。只要有可能,我必须检查属性提供者(例如,患者数据库)是否确实属于患者,以防止攻击

否则,攻击者可能会使患者在请求中变得更年轻,以便访问患者作为家长监护人的记录

问题

  • 针对属性提供程序检查请求是PDP的任务还是其他实体的任务
  • 绿洲有没有具体说明这个问题?例如,配置文件的工作流或语法
  • 有没有办法让我的pdp引擎知道属性提供者
  • 我是否应该在
    Response-Response=pdp.evaluate((请求)请求)之前自己检查提供的请求
  • 我不知道是否有其他XACML实现,但关于AuthzForce,属性提供程序在官方XACML术语中扮演着PIP的角色(请参阅的术语表中PIP的定义),即负责获取XACML请求上下文中不存在的任何附加属性(这通常意味着它们最初不是由PEP提供的),每当PDP需要它来评估策略时。这与XACML标准数据流模型(§3.1)的步骤5-8有关。此外,如果仔细阅读,您会注意到为PDP调用PIP的实际实体是所谓的上下文处理程序。实际上,这是一个实现问题,上下文处理程序可以采用多种形式。在AuthzForce中,它只是PDP的一个子组件,但您可能在PEP端也有一个特定于应用程序的组件,特别是在典型的ABAC/XACML场景中,从PEP的角度来看,PDP是一个远程服务,并且PDP可能在完全不同的应用程序环境中与许多PEP对话
  • 如前所述,对于工作流,请参阅中的第3.1节数据流模型。对于语法,XACML核心规范定义了策略、授权决策请求和响应的语法,目前没有其他定义。您可以在XACML概要文件中找到其他内容,但据我所知,没有配置语法
  • 在AuthzForce中,PDP引擎通过PDP配置(即示例中的
    PDP.xml
    文件)了解属性提供程序。根据要使用的属性提供程序,您还需要另外两个文件(XML目录和模式)。这在中有记录
  • 您的代码对我来说就像是测试代码,因为您是从本地文件获取xacml请求的,所以您似乎完全可以控制它,所以无需进一步检查。更一般地说,这取决于实际的用例,实际上,没有通用的规则。某些属性(如身份验证产生的主题id)是特定的,只有PEP在其自己的应用程序环境中才知道,因此它们是PEP的责任。如果可以以中心方式解决某些其他属性,例如公司目录中的属性或其他类型的标识存储库中的属性,则PDP更有可能负责这些属性(通过属性提供程序)

  • 除了@cdan的出色响应之外,这里还有几个要点:

    针对属性提供程序检查请求是PDP的任务还是其他实体的任务

    PDP始终信任其收到的信息(属性),无论是来自政治公众人物还是来自政治公众人物。因此,PDP无需通过检查PIP来验证其从PEP接收到的值。这会适得其反,效率低下。如果您不能信任政治公众人物发送正确的值,您如何信任它执行正确的决策

    绿洲有没有具体说明这个问题?例如,配置文件的工作流或语法

    不,我们没有。PIP行为超出了XACML规范的范围

    有没有办法让我的pdp引擎知道属性提供者? 我应该在Response-Response=pdp.evaluate((请求)请求)之前自己检查提供的请求吗


    PDP应配置PIP。PDP将尽可能使用所有PIP。

    我想你指的是这份文件:从第一手得到答案总是很好的!谢谢你,卡丹。您所说的非常正确:“更一般地说,这取决于实际的用例,实际上,没有通用的规则。”为了设计合适的实现,我必须了解更多关于PDP的具体实现。T
    //My request and pdp configuration files
    File confLocation = new File("D:/docs/XACML/AuthZForce/IIA001/pdp.xml");//pdp.xml tells the pdp where the policies xml files are
    File requestFile = new File("D:/docs/XACML/AuthZForce/IIA001/Request.xml");
    
    //I instantiate the pdp engine and the xacml parser
    final PdpEngineConfiguration pdpEngineConf = PdpEngineConfiguration.getInstance(confLocation, null, null);
    PdpEngineInoutAdapter<Request, Response> pdp = PdpEngineAdapters.newXacmlJaxbInoutAdapter(pdpEngineConf);
    XmlUtils.XmlnsFilteringParser xacmlParserFactory = XacmlJaxbParsingUtils.getXacmlParserFactory(false).getInstance();
    
    //I parse the request file
    Object request = xacmlParserFactory.parse(requestFile.toURI().toURL());
    if (request instanceof Request) {
        //At this point I could access all request attributes or alter them
    
        //I let the PDP evaluate the request
        Response response = pdp.evaluate((Request) request);
    
        //I check the results inside the response
        for (Result result : response.getResults()) {
                        if (result.getDecision() == DecisionType.PERMIT) {
                            //it's permitted!
    
                        } else {
                            //denied!
                        }
        }
    }