繁体   English   中英

在PDP处对属性提供者的XACML请求的属性进行双重检查的位置?

[英]Where to double-check attributes of the XACML-request against Attribute-Providers at the PDP?

我正在评估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文件中的属性。 只要有可能,我必须检查属性提供者(例如患者数据库),如果给定的属性(例如患者出生日期)实际上属于患者,以防止发作。

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

问题

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

除了@ cdan的出色响应之外,还有以下几点:

检查针对属性提供程序的请求是PDP或其他权限的任务吗?

无论是来自PEP还是来自PIP,PDP始终信任它接收的信息(属性)。 因此,PDP不需要通过检查PIP来验证它从PEP接收的值。 这是适得其反的低效率。 如果你不能相信PEP发送正确的价值,你怎么能相信它来执行正确的决定呢?

OASIS是否具体说明了该问题的具体内容? 例如配置文件的工作流程或语法

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

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

PDP应配置PIP。 PDP将使用它可以使用的所有PIP。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM