我正在评估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!
}
}
}
现在,根据类似于[1]的文献,我不应该信任给定request-xacml-file中的属性。只要有可能,我就必须检查属性提供者(例如,患者数据库)是否确实给定属性(例如,患者出生日期)属于患者,以防止受到攻击。
否则,攻击者可以使请求中的患者年龄更小,以访问作为父母监护人的患者记录。
问题
检查针对属性提供者的请求是PDP还是另一个实体的任务?
OASIS是否指定了有关该问题的具体内容?例如。配置文件的工作流程或语法
有没有一种方法可以使我的pdp引擎了解属性提供程序?
我是否应该在
Response response = pdp.evaluate((Request) request);
之前自行检查提供的请求? 最佳答案
我不知道其他XACML的实现,但是关于AuthzForce,属性提供者在正式的XACML术语中扮演着PIP的角色(请参见XACML spec术语表中的PIP定义),即负责获取任何其他非在XACML请求上下文中(通常意味着它们最初不是由PEP提供的),只要PDP需要它来评估策略。这与XACML标准数据流模型(XACML 3.0 spec的第3.1节)的步骤5-8有关。此外,如果仔细阅读XACML spec,您会注意到为PDP调用PIP的实际实体是所谓的上下文处理程序。实际上,这是一个实现问题,上下文处理程序可以采用多种形式。在AuthzForce中,它只是PDP的一个子组件,但是在PEP端也可能有一个特定于应用程序的组件,尤其是在典型的ABAC / XACML方案中,从PEP的角度来看PDP是远程服务,并且PDP可能正在与完全不同的应用程序环境中的许多PEP进行对话。
如前所述,对于工作流,请参见XACML core spec中的3.1数据流模型。对于语法,XACML核心规范为策略,授权决策请求和响应定义了一种语法,目前还没有其他内容。据我所知,您可能会在XACML概要文件中找到其他内容,但找不到配置语法。
在AuthzForce中,PDP引擎通过PDP配置(即您示例中的pdp.xml
文件)知道属性提供程序。根据要使用的属性提供程序,您将需要其他两个文件(XML目录和架构)。 Using Attribute Providers section of AuthzForce Core's wiki中对此进行了说明。
您的代码对我来说就像是测试代码,因为您是从本地文件获取xacml请求的,因此您似乎可以完全控制它,因此无需进一步检查。更一般而言,这取决于实际用例,实际上,没有通用的规则。一些属性(例如,由身份验证产生的主题ID)是特定的,并且仅由PEP在其自己的应用程序环境中知道,因此它们是PEP的责任。如果可以通过集中方式解析某些其他属性,则这些PDP可能由PDP负责(通过属性提供者),例如公司目录或其他类型的身份存储库中的属性。