繁体   English   中英

XACML PEP如何与上下文交互?

[英]How does a XACML PEP interact with a context?

我的问题与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上下文的一部分。

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

非常感谢!

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

在完整的XACML 2.0 / 3.0实现中,所有授权过程的真正中心节点或瓶颈是上下文处理程序组件,既不是PEP也不是PDP。 官方文档中建议的数据流清楚地表明了这一点。

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

在一般的简单情况下,例如,当您不需要PIP时,我建议像您一样将Context Handler粘贴在PEP域中。 这有很多原因:

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

在更复杂的情况下,您的授权请求可能不包含PDP做出决定所需的所有信息。 在这种情况下,PDP将需要向上下文处理程序询问这些信息,并且上下文处理程序必须能够访问PIP组件以检索那些用户资源环境值。 因为PIP 通常访问集中式资源,所以它通常是集中式服务。 PDP还通常是一个集中式的服务,所以平时 PDP和PIP是在同一个域中。

在这种情况下,您可能会想将上下文处理程序粘贴到PDP组件中。 但是,如果这样做,您将需要处理其他问题,因为在简单的情况下,您失去了去耦和上面列出的所有功能。 此外,按照XACML规范,我希望标准PDP能够通过XACML消息进行对话,但是,如果直接将Context Handler放在此处,则PDP确实会开始使用PEP本地语言。

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

暂无
暂无

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

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