[英]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
}
}
对象RequestType
, AttributesType
和其他对象是XACML上下文的一部分。
这是上下文处理程序类的正确方法,还是我完全错过了上下文处理程序的要点?
非常感谢!
我认为上下文处理程序是PDP的一部分。 PEP截取SOAP调用,提取参数值,使用这些值构成标准化的请求,然后将请求发送到PDP。 PDP从该请求中提取参数值,通过查询一些PIP查找其他值,将请求与其策略进行匹配以做出决策,然后组成标准响应,并将其发送回PEP。
在完整的XACML 2.0 / 3.0实现中,所有授权过程的真正中心节点或瓶颈是上下文处理程序组件,既不是PEP也不是PDP。 官方文档中建议的数据流清楚地表明了这一点。
因此,我认为第一个问题是“ 为了简单起见,将Context Handler组件粘贴在另一个组件中是一种好方法吗? ”是的。 然后“ 如果是,最好的地方是PEP或PDP? ”好吧,它认为这取决于您自己的实际情况。
在一般的简单情况下,例如,当您不需要PIP时,我建议像您一样将Context Handler粘贴在PEP域中。 这有很多原因:
在更复杂的情况下,您的授权请求可能不包含PDP做出决定所需的所有信息。 在这种情况下,PDP将需要向上下文处理程序询问这些信息,并且上下文处理程序必须能够访问PIP组件以检索那些用户资源环境值。 因为PIP 通常访问集中式资源,所以它通常是集中式服务。 PDP还通常是一个集中式的服务,所以平时 PDP和PIP是在同一个域中。
在这种情况下,您可能会想将上下文处理程序粘贴到PDP组件中。 但是,如果这样做,您将需要处理其他问题,因为在简单的情况下,您失去了去耦和上面列出的所有功能。 此外,按照XACML规范,我希望标准PDP能够通过XACML消息进行对话,但是,如果直接将Context Handler放在此处,则PDP确实会开始使用PEP本地语言。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.