authorization - 在哪里根据 PDP 的属性提供程序仔细检查 XACML 请求的属性?

标签 authorization xacml abac pdp 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!
                    }
    }
}

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

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

问题

  1. 检查针对属性提供者的请求是 PDP 还是其他实体的任务?
  2. OASIS 是否具体说明了该问题?例如。配置文件的工作流程或语法
  3. 有没有办法让我的 pdp 引擎识别属性提供者?
  4. 我是否应该在 Response response = pdp.evaluate((Request) request); 之前自行检查所提供的请求?

最佳答案

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

关于authorization - 在哪里根据 PDP 的属性提供程序仔细检查 XACML 请求的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50388935/

相关文章:

java - XACML 响应不适用

regex - 当 XACML 谈到 "regexp-match"时,它指的是哪个正则表达式规则?

php - 如何在 PHP 中实现基于属性的访问控制 (ABAC)

c# - 如何使用开放策略代理验证分层 RBAC/ABAC 策略定义中的应用程序授权?

java - 发送网格: "The provided authorization grant is invalid, expired, or revoked"

asp.net - ASP.NET 中的基于数据的授权

ios - “无法同步 iPhone,因为此计算机不再被授权用于此 iPhone : 上的已购买项目

git - 使用 .gitconfig 和 git-credential-helper 有什么区别?

具有多个条件的 XACML 3.0 策略

wso2 - XACML 策略 - 是否正确?