2

我正在评估 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);吗?
4

2 回答 2

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

除了@cdan 的出色回应,这里还有一些提示:

根据属性提供者检查请求是 PDP 还是其他实体的任务?

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

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

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

有没有办法让我的 pdp 引擎知道属性提供者?我是否应该在 Response response = pdp.evaluate((Request) request); 之前自行检查提供的请求?

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

于 2018-05-18T12:52:00.220 回答