2

我的问题与 XACML 上下文处理程序的角色和目的有关。如果我正确理解 OASIS XACML3.0 规范,PEP 会拦截来自客户端应用程序的对某些资源或访问的请求,然后使用上下文处理程序创建适合 PDP 处理的本机 XACML 上下文对象。在我的设计中,我将上下文处理程序作为一个全局类,其中包含创建请求对象和解析 xml 结果的方法。我设想这个类看起来像这样:

public static class ContextHandler
{
    public static bool CreatePolicy(PolicyType policyName)
    {
        // Serialize PolicyType to xml document

    }

    public static PolicyType LoadPolicy(string policyName)
    {
        // 1. Load policy from db, filesystem...
        // 2. Hydrate/deserialize into XACML policy object
        // 3. Return PolicyType object
    }

    public static RequestType BuildRequest(
        Dictionary<string, string> subjects,
        Dictionary<string, string> resources,
        Dictionary<string, string> actions,
        Dictionary<string, string> environment)
    {            
        // 1. Create AttributesType collection, populate with subjects, resource...
        // 2. Populate RequestType object
        // 3. Return Request

    }
}

对象RequestTypeAttributesType其他对象是 XACML 上下文的一部分。

这是上下文处理程序类的正确方法还是我完全错过了上下文处理程序的要点?

非常感谢!

4

3 回答 3

2

我认为上下文处理程序是 PDP 的一部分。PEP 拦截 SOAP 调用,提取参数值,使用这些值组成标准化请求,并将请求发送到 PDP。PDP 从该请求中提取参数值,通过查询一些 PIP 来查找附加值,将请求与它的策略进行匹配以做出决定,并组成一个标准化的响应发送回 PEP。

于 2012-07-02T11:15:45.213 回答
2

在完整的 XACML 2.0/3.0 实现中,所有授权过程的真正中心节点或瓶颈是 Context Handler 组件,既不是 PEP,也不是 PDP。官方文档中建议的 dataf-flow清楚地表明了这一点。

所以,我认为第一个问题是“为了简单起见,将 Context Handler 组件粘贴到另一个组件中是一种好方法吗? ”是的。然后“如果是,最好的地方是 PEP 还是 PDP? ”好吧,它认为这取决于您自己的实际情况。

在一般的简单场景中,例如当您不需要 PIP 时,我建议像您一样将上下文处理程序粘贴在 PEP 域中。这有很多原因:

  • 你可能有很多 PEP,而不仅仅是一个,所以你应该实现 PEP 和 PDP 之间的解耦
  • 每个 PEP 都知道自己特定的授权请求规范,因此它能够将本机请求转换为标准 XACML 请求,反之亦然
  • 您获得一个不受特定 PEP 逻辑、PEP 依赖项(即第三方库)和 PEP 代码管理(即授权请求规范的更改、错误修复、新部署等)影响的中央和标准 PDP

在更复杂的场景中,您的授权请求可能不包含 PDP 做出决定所需的所有信息。在这种情况下,PDP 需要向 Context Handler 请求这些信息,并且 Context Handler 必须能够访问 PIP 组件以检索那些用户-资源-环境值。因为 PIP通常访问中心化的资源,所以它通常是一个中心化的服务。PDP通常也是一种集中式服务,因此PDP 和 PIP通常在同一个域中。

在这种情况下,您可能很想将上下文处理程序粘贴到 PDP 组件中。但是如果你这样做了,你将需要处理其他问题,因为你在简单的场景中失去了解耦和上面列出的所有特性。此外,遵循 XACML 规范,我希望标准 PDP 能够通过 XACML 消息进行对话,但是,如果您将上下文处理程序直接放在那里,PDP 就真正开始使用 PEP 本地语言。

于 2014-01-13T17:36:48.747 回答
0

是的。我也希望上下文处理程序成为 PDP 的一部分。PEP 可以与您的应用程序一起拦截您的请求并询问 PDP 的授权决定。您可以找到开源 XACML 3.0。从这里称为“Balana”(sun-xacml 的改进)的实现被 WSO2 Identity Server 用作它的 XACML 引擎。从其源代码中,您可以找到详细说明上下文处理程序实现的 ctx 类。此博客还将帮助您了解 XACML 3.0 的新事物。

于 2012-07-23T04:47:04.087 回答