在哪里可以在PDP上针对属性提供者再次检查XACML请求的属性?

One*_*rld 2 authorization xacml pdp abac authzforce

我正在评估PDP引擎,此刻我尝试AuthzForce Core。到目前为止,PDP评估请求的过程非常可靠:

//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!
                    }
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,根据类似[1]的文献,我不应该信任给定request-xacml-file中的属性。只要有可能,我就必须检查属性提供者(例如,患者数据库)是否确实给定属性(例如,患者出生日期)属于患者,以防止遭受攻击。

否则,攻击者可以在“请求”中使患者更年轻,以访问作为父母监护人的患者记录。

问题

  1. 检查针对属性提供者的请求是PDP还是另一个实体的任务?
  2. OASIS是否指定了有关该问题的具体内容?例如工作流程或配置文件的语法
  3. 有没有一种方法可以使我的pdp引擎了解属性提供程序?
  4. 我是否应该只自己检查提供的请求Response response = pdp.evaluate((Request) request);

Cyr*_*lle 5

  1. 我不知道其他XACML的实现,但是关于AuthzForce,属性提供者在正式的XACML术语中扮演PIP的角色(请参阅XACML规范Glossary中的PIP定义),即负责获取未包含在其中的任何其他属性。 XACML请求上下文(通常意味着它们最初不是由PEP提供的),只要PDP需要它来评估策略。这与XACML标准数据流模型(XACML 3.0规范的第 3.1节)的步骤5-8有关。此外,如果您仔细阅读XACML规范,则会注意到为PDP调用PIP的实际实体是所谓的上下文处理程序。实际上,这是一个实施问题,上下文处理程序可以采用多种形式。在AuthzForce中,它只是PDP的一个子组件,但是在PEP端也可能有一个特定于应用程序的组件,尤其是在典型的ABAC / XACML方案中,从PEP的角度来看PDP是远程服务,而PDP可能正在与完全不同的应用环境中的许多PEP进行对话。
  2. 如前所述,对于工作流,请参阅XACML核心规范中的3.1 数据流模型。对于语法,XACML核心规范定义了用于策略,授权决策请求和响应的语法,目前还没有其他内容。据我所知,您可能会在XACML概要文件中找到其他内容,但是找不到诸如配置语法之类的东西。
  3. 在AuthzForce中,通过PDP配置(即pdp.xml示例中的文件)使PDP引擎知道属性提供程序。根据要使用的属性提供程序,您将需要另外两个文件(XML目录和架构)。AuthzForce Core Wiki的“ 使用属性提供程序”部分对此进行了记录
  4. 您的代码对我来说就像是测试代码,因为您是从本地文件获取xacml请求的,因此您似乎可以完全控制它,因此无需进一步检查。更一般而言,这取决于实际用例,实际上,没有通用的规则。一些属性(例如,由身份验证产生的主题ID)是特定的,并且仅由PEP在其自己的应用程序环境中知道,因此,它们是PEP的责任。如果可以通过集中方式解析某些其他属性(例如,属性提供者),则PDP的责任(通过属性提供者),例如公司目录或其他类型的身份存储库中的属性。