-
2021-03-18 12:34:12
XACML 3.0表示法 h2>
PolicyId="http://axiomatics.com/alfa/identifier/example.simpleCondition"
RuleCombiningAlgId="urn:oasis:names:tc:xacml:1.0:rule-combining-algorithm:first-applicable"
Version="1.0">
http://www.w3.org/TR/1999/REC-xpath-19991116
Effect="Permit"
RuleId="http://axiomatics.com/alfa/identifier/example.simpleCondition.simpleCondition">
DataType="http://www.w3.org/2001/XMLSchema#string">PI
AttributeId="urn:oasis:names:tc:xacml:1.0:subject:subject-id"
DataType="http://www.w3.org/2001/XMLSchema#string"
Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject"
MustBePresent="false"
/>
使用Axiomatics策略管理点(PAP) h2>测试策略
构建XACML请求以测试您的用例。
清空XACML请求 h3>
由于MustBePresent标志,此请求会导致Indeterminate。
具有错误主题ID的XACML请求 h3>
Not PI
此请求导致NotApplicable。
具有正确主题ID的XACML请求,PI h3>
PI
此请求导致许可。
这是Axiomatics Policy Administration Point中评估跟踪的样子:
更多相关内容 -
XACML Learning Tool-开源
2021-07-29 04:35:26此应用程序适用于希望快速学习如何使用基于 XACML 的系统的最终用户。 它让用户可以创建和加载 XACML 策略,然后在单独的窗口中分析 XACML 响应。 -
XACML-Studio-开源
2021-04-26 00:05:54XACML-Studio是作为Web应用程序实现的授权策略编辑器,它允许导入,创建,编辑,导出XACML 2.0规范中定义的策略。 直观的UI和基于数据库的存储库改善了策略创建者的体验。 -
基于统计分析优化的高性能XACML策略评估引擎
2021-01-14 22:07:10为提高分布式环境下XACML策略评估引擎的效率,提出了新的XACML策略评估引擎HPEngine。该引擎利用基于统计分析的策略优化机制动态精化策略,并将精化的策略由于统计分析的多级缓存机制存储频繁调用的请求结果对、属性... -
网格服务中基于XACML和SAML的安全访问控制
2020-10-20 05:23:13为了解决网格环境下资源访问控制存在的安全性问题,通过分析可扩展访问标记语言XACML、安全声明标记语言SAML及其相关技术,提出了一个基于XACML和SAML的访问控制模型。模型采用可扩展访问标记语言XACML描述访问控制... -
xacml4j:OASIS XACML 2.0 & 3.0 规范在 Java 编程语言中的实现
2021-06-22 06:14:06xacml4j v2.0 和 v3.0 规范在 Java 编程语言中的实现 Travis CI 上的持续集成状态: -
Sun's XACML Implementation-开源
2021-07-01 02:36:36Sun 的 XACML 实现是一种完全用 Java(tm) 编程语言编写的访问控制策略评估引擎。 它支持 XACML 1.x 和 2.0 核心特性,并提供许多强大的扩展和扩展点。 -
UMU-XACML-Editor-开源
2021-05-03 14:09:22该项目的主要目的是开发以Java语言实现并基于XACML标准的图形策略定义编辑器,该编辑器管理访问控制策略 -
论文研究-基于XACML的访问控制模型在CAS中的应用 .pdf
2019-08-15 14:14:25基于XACML的访问控制模型在CAS中的应用,王子才,,CAS(Central Authentication Service)是耶鲁大学的一个开源的单点登录项目。由于CAS项目中没有给出实际的访问控制模块,笔者提出了一个基于 -
xacml_使用XACML控制信息访问
2020-06-22 10:16:25关于可扩展访问控制标记语言(XACML)的文章从该文章的开头继续。 尽管SAML提供了一种进行身份验证和授权声明的机制以及一种传达它们的机制,但是XACML提供了一种语言,该语言定义了做出必要的授权决策所需的规则。...xacml
在有关XML安全性的系列的最后一篇文章中,我介绍了安全性断言标记语言(SAML)。 关于可扩展访问控制标记语言(XACML)的文章从该文章的开头继续。 尽管SAML提供了一种进行身份验证和授权声明的机制以及一种传达它们的机制,但是XACML提供了一种语言,该语言定义了做出必要的授权决策所需的规则。
例如,考虑一种情况,即主体请求访问目标资源。 在执行决策并将目标资源释放给主体之前,策略执行点(PEP)与策略决策点(PDP)进行检查。 访问目标资源的请求的生成以及随后的授予或拒绝访问的响应属于SAML的范围。 XACML解决了PEP和PDP之间的策略决策交换。
访问控制和XACML
XACML是为访问控制和授权系统开发标准的一项举措。 当前大多数系统以专有方式实现访问控制和授权。
典型的访问控制和授权方案包括三个主要实体- 主题 , 资源和操作 -及其属性。 主题请求许可以对资源执行操作。 例如,在访问请求“允许财务经理在财务服务器上的发票文件夹中创建文件”中,主题为“财务经理”,目标资源为“财务服务器上的发票文件夹”,并且操作是“创建文件”。
在专有的访问控制系统中,有关这些实体及其属性的信息保存在存储库中。 这些存储库称为访问控制列表(ACL)。 不同的专有系统具有不同的实现ACL的机制,这使得它们之间难以交换和共享信息。
XACML目标
XACML旨在实现以下目标:
- 创建描述访问控制实体及其属性的可移植标准方法。
- 提供一种机制,它提供了比简单地拒绝或授予访问权限更精细的粒度访问控制,即一种可以在“允许”或“拒绝”许可权之前和之后执行某些操作的机制。
XACML和SAML:有何不同和相似之处?
XACML架构与SAML架构紧密相连。 它们都共享许多概念和一个域-身份验证,授权和访问控制的域。 但是,它们在同一域中解决的问题有所不同。 尽管SAML解决了身份验证并提供了在合作实体之间传输身份验证和授权决策的机制,但是XACML专注于用于获得那些授权决策的机制。
SAML标准提供了允许第三方发送其身份验证和授权请求的接口。 XACML标准解决了内部如何处理这些授权请求。 XACML不仅处理授权请求,而且定义了用于创建规则,策略和策略集的完整基础结构以得出授权决策的机制。 我将在XACML中详细讨论这些概念:螺母和螺栓 。
鉴于SAML和XACML都共享同一个域,因此很有可能并希望将这两个规范最终合并为一个。
XACML架构
XACML由图1中描述的许多组件组成。 其中一些组件也与SAML共享。 共享的组件用红色边框标记。
图1. XACML主要组件
授权请求位于策略执行点(PEP) 。 PEP创建一个XACML请求,并将其发送到Policy Decision Point(PDP) ,后者对请求进行评估并发送回响应。 在适当的义务下,响应可以是允许访问或拒绝访问。 我将在本文后面解释义务。
PDP在评估相关政策和其中的规则后做出决定。 可能有许多策略:PDP不会评估所有策略; 根据政策目标,仅选择相关的评估。 策略目标包含有关主题,操作和其他环境属性的信息。 稍后在“ 策略目标创建”中说明如何通过PDP选择策略进行评估的完整过程。
为了获得策略,PDP使用策略访问点(PAP)来编写策略和策略集,并将其提供给PDP。 PDP还可以调用策略信息点(PIP)服务来检索与主题,资源或环境有关的属性值。 PDP得出的授权决定将发送到PEP。 PEP履行义务,并且根据PDP发送的授权决定,允许或拒绝访问。
XACML:螺栓和螺母
为了说明各种XACML组件,我将向您展示如何接受特定的访问请求并创建处理该请求所需的所有XACML组件。 访问请求如下:属于
owner
组(主题的属性)的主题mverma@secf.com
试图对资源file:///D:/Documents/Administrator/Desktop/Project Plan.html
执行open
操作file:///D:/Documents/Administrator/Desktop/Project Plan.html
。 创建所有必需的XACML组件之后,您应该获得此请求的授权决定。请记住,XACML具有三个顶级组件:策略,PEP和PDP。 为定义的请求创建XACML基础结构的过程仅围绕这三个组件。 图2中的图说明了这些组件如何相互链接:
图2.策略语言模型
您需要做的第一件事是创建一个处理请求的策略。
XACML政策
策略包括:一组规则,用于规则组合算法的标识符,一组义务和一个目标。 到目前为止,这是XACML的最重要方面。 XACML中的大多数操作都发生在策略中。
我将向您展示如何创建可以处理请求的策略-策略的范围需要比请求的范围更广。 您将创建的策略将如下所示:允许
secf.com
命名空间中具有电子邮件名称的任何用户对资源file:///D:/Documents/Administrator/Desktop/Project Plan.html
执行任何操作file:///D:/Documents/Administrator/Desktop/Project Plan.html
。 请注意,该策略比请求更通用。策略是几个子组件的组合:目标,规则,规则组合算法和义务。 了解这些子组件是理解策略的必要条件。 让我解释一下每个子组件的重要性:
- 目标:每个策略只有一个目标。 该目标有助于确定策略是否与请求相关。 策略与请求的相关性确定是否要为请求评估策略。 这是通过在目标中定义三个类别的属性(主题,资源和操作)及其值来实现的。 目标中所有三个类别的属性不是强制性的。 将这些属性的值与请求中相同属性的值进行比较; 如果它们匹配(在它们上应用了某些功能之后,您将在本文后面详细介绍),则该策略被认为与请求相关并被评估。
- 规则 -多个规则可以与一个策略相关联。 每个规则都由条件,效果和目标组成。
- 条件是关于属性的声明,评估后返回
True
,False
或Indeterminate
。 - 效果是满意规则的预期结果。 它可以采用
Permit
或Deny
值。 - 与策略一样, Target有助于确定规则是否与请求相关。 实现此目标的机制也类似于在制定策略目标的情况下的实现方式。
Indeterminate
,则规则还将返回Indeterminate
。 如果条件返回False
,则规则返回NotApplicable
。 如果条件返回True
,则返回Effect
元素的值,即Permit
或Deny
。 - 条件是关于属性的声明,评估后返回
- 规则组合算法:正如我在上文中所解释的 ,一个策略可以有多个规则。 不同的规则可能会产生冲突的结果。 规则组合算法负责解决此类冲突,以使每个请求每个策略获得一个结果。 每个策略仅适用一种规则组合算法。 有关更多详细信息,请参见规则组合算法 。
- 义务:请记住,XACML的目标之一是提供比单纯的允许和拒绝决策更为精细的访问控制。 好吧,义务是实现这一目标的机制。 义务是PEP必须与授权决定的执行一起执行的动作。 评估策略后,将特定的义务与授权决定一起发送到PEP。 PEP除了执行授权决定外,还负责执行指定为义务的操作。
政策制定
本节将带您深入了解策略创建代码。 首先,根据需要创建
policy
对象(请参见清单1)和子组件。 本文的所有编码示例均使用Sun的XACML实现( 有关实现,请参阅参考资料 )。清单1.创建一个策略
// Create policy identifier and policy description URI policyId = new URI("ProjectPlanAccessPolicy"); String description = "This AccessPolicy applies to any account at secf.com " + "accessing file:///D:/Documents/Administrator/Desktop/Project Plan.html."; // Rule combining algorithm for the Policy URI combiningAlgId = new URI(OrderedPermitOverridesRuleAlg.algId); CombiningAlgFactory factory = CombiningAlgFactory.getInstance(); RuleCombiningAlgorithm combiningAlg = (RuleCombiningAlgorithm) (factory.createAlgorithm(combiningAlgId)); // Create the target for the policy Target policyTarget = createPolicyTarget(); // Create the rules for the policy List ruleList = createRules(); // Create the policy Policy policy = new Policy( policyId, combiningAlg, description, policyTarget, ruleList); // Display the policy on the std out policy.encode(System.out, new Indenter());
清单1演示了如何创建
policy
。 但是真的吗?policy
创建的关键在于其子组件的创建。 此清单仅演示如何将这些子组件放在一起以构成policy
对象。 但是,它确实说明了该policy
的总体结构。 以下是该策略的组合方式:- 选择策略的规则组合算法。 我使用了
ordered-permit-override
算法,因此按规则在策略中指定的顺序对规则进行评估。 - 创建策略目标。 目标创建有点复杂-它需要自己的代码清单和说明才能有意义。 清单2演示了该策略的目标创建。
- 创建要与策略关联的规则。 与目标一样,规则创建是一个涉及的过程,需要它自己的清单。 清单3专门用于解释规则创建。
- 在创建了所有必需的策略子组件之后,使用它们来创建
policy
对象。 - 将
policy
对象存储在文件中,以便稍后传递给PDP。
接下来的两节演示了该策略的子组件的创建。 我从目标创建开始,并以规则和相关条件的创建结束策略创建的讨论。
制定政策目标
目标创建是创建策略的重要方面。 目标是选择相关策略以评估请求的机制。 要创建策略目标,您需要定义属于以下三个类别之一的属性及其值:主题,资源或操作。 当PDP评估请求时,它将查找目标具有与请求中相同值的属性的策略。
接下来,我将说明如何以编程方式实现这一目标。 XACML提供了一种称为
AttributeDesignator
的机制,用于比较请求和策略目标中的属性值。使用
AttributeDesignator
,可以通过定义属性的名称和类型来指定它。 此外,您还可以指定属性的值-将在目标中指定的属性值与请求中的属性值进行比较。 要进行此比较,请选择一种预配置功能。 该函数与AttributeDesignator
一起用于创建TargetMatch
对象。 您可以创建多个TargetMatch
对象; 每个属性一个。 属于一个类别的所有TargetMatch
对象都放在一个列表中,并传递给Target
对象。 该Target
对象是您用来创建Policy
对象的对象。该策略应如下所示:“任何在
secf.com
名称空间中使用电子邮件名称的secf.com
都可以对资源file:///D:/Documents/Administrator/Desktop/Project Plan.html
执行任何操作。 ” 对于此策略,您可以创建一个具有两个属性的目标-一个用于主题,另一个用于资源。 您不需要为操作创建属性,因为您要创建的策略不会试图限制任何操作。清单2演示了策略目标的创建。 您想要将请求中主题的电子邮件的域名值与目标中指定的域名进行比较,因此可以为主题指定属性
urn:oasis:names:tc:xacml:1.0:data-type:rfc822Name
(电子邮件ID)在目标中。 要使其成为目标的一部分,请定义属性类型(urn:oasis:names:tc:xacml:1.0:data-type:rfc822Name
),属性名称(urn:oasis:names:tc:xacml:1.0:subject:subject-id
)和比较器函数,在本例中为urn:oasis:names:tc:xacml:1.0:function:rfc822Name-match
。 此函数将目标中指定的属性的值与请求中相同属性的值进行比较。 对于资源类型http://www.w3.org/2001/XMLSchema#anyURI
的属性,遵循类似的过程。清单2.创建一个策略目标
public static Target createPolicyTarget() throws URISyntaxException { List subjects = new ArrayList(); List resources = new ArrayList(); // Attributes of Subject type // Multiple subject attributes can be specified. In this // case only one is being defined. List subject = new ArrayList(); URI subjectDesignatorType = new URI("urn:oasis:names:tc:xacml:1.0:data-type:rfc822Name"); URI subjectDesignatorId = new URI("urn:oasis:names:tc:xacml:1.0:subject:subject-id"); // Match function for the subject-id attribute String subjectMatchId = "urn:oasis:names:tc:xacml:1.0:function:rfc822Name-match"; AttributeDesignator subjectDesignator = new AttributeDesignator( AttributeDesignator.SUBJECT_TARGET, subjectDesignatorType, subjectDesignatorId, false); StringAttribute subjectValue = new StringAttribute("secf.com"); // get the factory that handles Target functions FunctionFactory factory = FunctionFactory.getTargetInstance(); // get an instance of the right function for matching // subject attributes Function subjectFunction = factory.createFunction(subjectMatchId); TargetMatch subjectMatch = new TargetMatch( TargetMatch.SUBJECT, subjectFunction, subjectDesignator, subjectValue); subject.add(subjectMatch); // Attributes of resource type // Multiple resource attributes can be specified. In this // case only one is being defined. List resource = new ArrayList(); URI resourceDesignatorType = new URI("http://www.w3.org/2001/XMLSchema#anyURI"); URI resourceDesignatorId = new URI("urn:oasis:names:tc:xacml:1.0:resource:resource-id"); // Match function for the resource-id attribute String resourceMatchId = "urn:oasis:names:tc:xacml:1.0:function:anyURI-equal"; AttributeDesignator resourceDesignator = new AttributeDesignator( AttributeDesignator.RESOURCE_TARGET, resourceDesignatorType, resourceDesignatorId, false); AnyURIAttribute resourceValue = new AnyURIAttribute( new URI("file:///D:/Documents/Administrator/Desktop/Project Plan.html")); // Get an instance of the right function for matching // resource attribute Function resourceFunction = factory.createFunction(resourceMatchId); TargetMatch resourceMatch = new TargetMatch( TargetMatch.RESOURCE, resourceFunction, resourceDesignator, resourceValue); resource.add(resourceMatch); // Put the subject and resource sections into their lists subjects.add(subject); resources.add(resource); // Create and return the new target. No action type // attributes have been specified in the target return new Target(subjects, resources, null); }
规则创建
规则可能是策略中最重要的子组件。 如上所述,规则本质上是评估为
Permit
,Deny
,Indeterminate
或不NotApplicable
。要继续创建处理授权请求所需的XACML组件的过程(要查看,请参阅XACML的第一段:螺母和螺栓 ),现在您要创建一个适当的规则。 这实质上可以归结为创造适当的条件。 清单3演示了规则创建。 如果您看一下代码,将会看到三件事:
- 创建规则目标
- 效果的定义
- 条件的创造
这三个中的两个-创建规则目标和定义规则的效果-很简单。 第三个-创建条件-涉及更多,稍后我将对其进行详细描述。
为满足请求而创建的规则应如下所示:“如果属于组
owner
的主题mverma@secf.com
试图打开资源file:///D:/Documents/Administrator/Desktop/Project Plan.html
,然后允许访问。” 要创建这样的规则,请创建目标,以便针对正在处理的请求评估该规则。 创建规则目标类似于为策略创建目标的方式。 然后,将规则的effect
定义为Permit
。 要使规则返回effect
的值,相关条件必须返回True
。 清单4中的代码说明了条件的创建。清单3.创建规则
public static List createRules() throws URISyntaxException { // Step 1: Define the identifier for the rule URI ruleId = new URI("ProjectPlanAccessRule"); String ruleDescription = “Rule for accessing project plan"; // Step 2: Define the effect of the rule int effect = Result.DECISION_PERMIT; // Step 3: Get the target for the rule Target target = createRuleTarget(); // Step 4: Get the condition for the rule Apply condition = createRuleCondition(); // Step 5: Create the rule Rule openRule = new Rule(ruleId, effect,ruleDescription, target, condition); // Create a list for the rules and add the rule to it List ruleList = new ArrayList(); ruleList.add(openRule); return ruleList; }
清单4演示了规则条件的创建。 与为策略目标创建
AttributeDesignator
方式几乎相同,您可以创建AttributeDesignator
对象,以将请求中的属性值与条件中指定的值进行比较。 这里感兴趣的属性是主题所属的group
。group
属性必须具有值owner
,条件才能返回True
。您需要为该条件做的唯一的另一件事是使用一个函数从
AttributeDesignator
返回的倍数中提取一个值。 在这种情况下,请使用函数urn:oasis:names:tc:xacml:1.0:function:string-one-and-only
。 有关处理AttributeDesignator
多个值的更多信息,请参见AttributeDesignator返回值 。如清单4所示 ,您将创建
AttributeDesignator
对象来定义一个属性,该属性的值要与请求中得到的值进行比较。 比较算法用于进行比较。 然后,您定义函数以从AttributeDesignator
返回的那些值中选择一个值。 最后,创建Apply
对象,该对象类似于您在目标中创建的TargetMatch
对象。Apply
对象的目的是将比较函数应用于从包中选取的值(由AttributeDesignator
返回),并将其与条件中指定的值进行比较。清单4.为规则创建条件
public static Apply createRuleCondition() throws URISyntaxException { List conditionArgs = new ArrayList(); // Define the name and type of the attribute // to be used in the condition URI designatorType = new URI("http://www.w3.org/2001/XMLSchema#string"); URI designatorId = new URI("group"); // Pick the function that the condition uses FunctionFactory factory = FunctionFactory.getConditionInstance(); Function conditionFunction = null; try { conditionFunction = factory.createFunction( "urn:oasis:names:tc:xacml:1.0:function:" + "string-equal"); } catch (Exception e) { return null; } // Choose the function to pick one of the // multiple values returned by AttributetDesignator List applyArgs = new ArrayList(); factory = FunctionFactory.getGeneralInstance(); Function applyFunction = null; try { applyFunction = factory.createFunction( "urn:oasis:names:tc:xacml:1.0:function:" + "string-one-and-only"); } catch (Exception e) { return null; } // Create the AttributeDesignator AttributeDesignator designator = new AttributeDesignator( AttributeDesignator.SUBJECT_TARGET, designatorType, designatorId, false null); applyArgs.add(designator); // Create the Apply object and pass it the // function and the AttributeDesignator. The function // picks up one of the multiple values returned by the // AttributeDesignator Apply apply = new Apply(applyFunction, applyArgs, false); // Add the new apply element to the list of inputs // to the condition along with the AttributeValue conditionArgs.add(apply); StringAttribute value = new StringAttribute("owner"); conditionArgs.add(value); // Finally, create and return the condition return new Apply(conditionFunction, conditionArgs, true); }
这样,策略创建任务就完成了。 让我快速回顾一下策略创建过程中涉及的内容。 首先,创建必要的策略子组件:策略目标,规则和规则组合算法。 您没有为政策创建义务,因为它们是可选的。 规则的创建本质上是指创建规则目标和条件。 这些也将通过自己的代码清单进行演示。 所有这些策略子组件均在此处用于创建策略。
PEP的创建是创建处理授权请求所需的XACML组件的下一步。 PEP会做什么? 它会创建要为其创建所有这些XACML组件的授权请求 !
政策执行点(PEP)
PEP基于请求者的属性,相关资源,操作和其他信息来创建请求。 在这里,我演示了用于创建您开始的请求的机制。 为了您的方便,我将重复请求:属于
owner
组(主题的属性)的主题mverma@secf.com
试图对资源file:///D:/Documents/Administrator/Desktop/Project Plan.html
执行open
操作file:///D:/Documents/Administrator/Desktop/Project Plan.html
。 要创建这样的请求,您需要两个主题属性,一个资源属性和一个动作属性。 两个主题属性是rfc822Name
(电子邮件ID)和主题所属的组。 一个资源属性是资源的URI,而一个动作属性是对该资源的打开操作。 清单5展示了具有所有这些属性的PEP的创建。到目前为止,您已经看到策略的创建和PEP的请求生成。 现在剩下的唯一要创建的XACML组件是PDP。
政策决策点(PDP)
PDP根据策略评估请求并返回响应。
由于XACML规范没有定义任何用于将策略和请求传递到PDP以评估请求的特定机制,因此可以选择任何方便的机制。 在这种情况下,策略和请求将作为命令行参数传递到PDP。
请注意,PDP不会根据需要服务的请求类型而改变。 它是一个通用组件,它接受任何请求以及一组策略,并根据适用的策略评估该请求。 清单6演示了如何创建PDP,以及如何使用它来评估来自PEP的请求。 清单6之后将详细描述PDP创建和请求评估过程。
清单6.创建一个PDP
public static void main(String[] args) throws Exception { if (args.length < 2) { System.out.println("Usage: <request> <AccessPolicy> [policies]"); System.exit(1); } // Step 1: Get the request and policy file from the command line String requestFile = null; requestFile = args[0]; String[] policyFiles = new String[args.length - 1]; for (int i = 1; i < args.length; i++) policyFiles[i - 1] = args[i]; // Step 2: Create a PolicyFinderModule and initialize it // Use the sample FilePolicyModule, which // is configured using the policies from the command line FilePolicyModule filePolicyModule = new FilePolicyModule(); for (int i = 0; i < policyFiles.length; i++) filePolicyModule.addPolicy(policyFiles[i]); // Step 3: Set up the PolicyFinder that this PDP will use // PolicyFinder policyFinder = new PolicyFinder(); Set policyModules = new HashSet(); policyModules.add(filePolicyModule); policyFinder.setModules(policyModules); // Step 4: Create the PDP PDP pdp = new PDP(new PDPConfig(null, policyFinder, null)); // Get the request send by the PEP RequestCtx request = RequestCtx.getInstance(new FileInputStream(requestFile)); // Step 5: Evaluate the request. Generate the response. ResponseCtx response = pdp.evaluate(request); // Display the output on std out response.encode(System.out, new Indenter()); }
以下分步说明详细介绍了PDP创建和请求评估:
- 从命令行参数获取请求和策略文件。
- 创建一个
PolicyFinderModule
并使用FilePolicyModule
对象对其进行初始化。FilePolicyModule
是使用命令行中的策略配置的。PolicyFinderModule
是三个查找器模块之一:-
PolicyFinderModule
-
AttributeFinderModule
-
ResourceFinderModule
-
- 设置
PDP
将使用的策略查找器。 - 创建
PDP
通过初始化PDP
类。 的PDPConfig
对象,这是使用配置的FilepolicyModule
,被提供给PDP
的构造。 - 通过调用
PDP
上的evaluate
方法,evaluate
来自PEP
的请求。 这将返回授权决定。 如果按照本文所述创建了所有XACML组件,则PDP将做出“Permit
授权决定。
授权决定被传送回
PEP
。 您可以选择将决策发送回PEP
的机制。这样就完成了对创建请求所需的三个主要XACML组件(策略,PEP和PDP)的说明和演示。
结论
访问控制是几乎所有大型和小型应用程序都使用的领域。 XACML试图将标准化引入这一领域。 尽管XACML是一种冗长的语言,但是一旦掌握了该语言的基本概念和流程,就很容易构建访问控制机制。
在本文中,我带您完成了创建基本XACML组件的过程:
- 政策,包括规则和政策目标
- PEP
- PDP
有了这些知识,您就可以采用XACML来处理当前和将来所有应用程序中的访问控制。
翻译自: https://www.ibm.com/developerworks/xml/library/x-xacml/index.html
xacml
-
论文研究-基于XACML的RBAC授权机制 .pdf
2019-08-16 11:36:12基于XACML的RBAC授权机制,林智鑫,龙毅宏,XACML规范定义了支持RBAC的策略结构,但是并未涉及职责分离策略。本文通过分析XACML RBAC Profile并对其进行补充和修改,提出了一种支持职 -
tutorials.Administrating-XACML:固件406
2021-04-13 22:19:32修改了基于动词资源的简单权限,以使用XACML,并将新的XACML权限添加到现有角色。 更新后的规则集将自动上载到Authzforce PDP,以便策略执行点(例如PEP代理)能够应用最新的规则集。 本教程演示了使用Keyrock GUI... -
fiware-pep-proxy:支持基于OAuth2的身份验证架构中的代理... 还可以在基于XACML的访问控制架构中实现PEP功能
2021-05-16 23:53:00PEP代理-Wilma Wilma是PEP代理-可以与其他安全组件(例如和结合使用,以对后端应用程序实施访问控制。 这意味着只有允许的用户才能访问您的通用启动器或REST服务。 通过身份管理,您可以管理对资源的特定权限和... -
XACML知识初识
2017-09-22 08:37:28XACML(可扩展的访问控制高标识语言)简单概述(百度百科): 文章中更多采用的是从网上整理的资料,因为刚刚学习,所以自己的见解很少,日后会更. XACML是一种用于决定请求/响应的通过访问控制策略语言和执行授权策略的...XACML(可扩展的访问控制高标识语言)简单概述(百度百科):
文章中更多采用的是从网上整理的资料,因为刚刚学习,所以自己的见解很少,日后会更.
XACML是一种用于决定请求/响应的通过访问控制策略语言和执行授权策略的框架,他在传统的分布式环境中北广泛用于访问控制策略的执行.在典型的访问控制框架中,有策略执行点(PEP)(Policy Enforcement Point)和策略决定点PDP(PolicyDecision Point).PEP用于表达请求和执行访问控制决定.PDP从PEP处接收请求,评估适用于该请求的策略,并将授权决定返回给PEP.
XACML是一种基于XML的开放标准语言,他设计用于描述安全政策以及对网络服务,数字版权管理(DRM)以及企业安全应用细腻系进行访问的权限.
主体:(Subject)主体即请求对某种资源执行某些动作的请求者。
资源(Resource)资源即是系统提供给请求者使用的数据,服务和系统组件。
策略(policy)策略是一组规则,规定主体对资源使用的一些要求,多个策略进行组合形成策略集。(Policy Set)
策略执行点(PolicyEnforcement Point PEP):是在一个具体的应用环境下执行访问控制的实体,将剧吐应用环境下访问控制请求转换为适应XACML要求的策略请求。然后根据决策请求的判决结果执行相应的动作,如允许用户请求和拒绝用户请求等。
策略决策点(PolicyDecision Point。PDP)是系统中授权的实体,依据XACML描述的访问控制策略以及其他属性信息进行访问控制决策。
策略管理点(PolicyAdministration Point,PAP)是在系统中产生和维护安全策略的实体。
策略信息点(PolicyInformation Point,PIP),通过他可以获取主体、资源和环境的属性信息的实体。
访问控制框架的执行的基本流程:
访问控制的框架执行基本流程:
1. 策略管理点(PAP)产生需要的安全策略,这些策略使用XACML语言描述,是访问控制决策的基础。
2. 在一个具体的应用程序环境下,策略执行点(PEP)截获用户发送的访问控制请求,这个访问控制请求的内容和格式根据不同的应用程序而不同。
3. 策略执行点将截获的访问控制请求发送给上下文处理器,由上下文处理器把请求统一成XACML格式的访问控制请求。
4. 上下文处理器将产生的XACML格式的访问控制请求发送给访问控制决策点(PDP),请求PDP进行访问控制决策。
5. PDP在处理访问控制决策的时候可能需要其他的一些条件,如主体的属性、资源的属性及环境的属性,PDP将这些额外条件请求发送给上下文处理器
6. 上下文处理器将依据属性请求的类型,向策略信息点(PIP)发送属性请求
7. PIP根据请求向不同的实体请求不同的属性信息,包括主体的属性信息、环境的属性信息及环境的属性信息,并将得到的信息返回给PEP,以执行相应的决策结果
8. 上下文处理器将属性信息和资源的上下文(资源的上下文信息可选)发送给PDP.
9. PDP根据策略信息、属性信息,以及资源的上下文信息进行访问控制决策,并将决策结果返回给上下文处理器。上下文处理器将决策结果返回PEP,以执行相应的决策结果。
10. 在返回的决策结果中可能是拒绝,也可能是许可,还可能带上有相应的职责信息,如需要进行日志记录等。
策略描述语言---XACML
随着分布式系统的发展,对分布式系统的资源访问控制由集中管理方式变成了分布式管理方式。
一个大型企业组织内部,相同的安全策略可能在组织内部的过个点执行。一个资源的安全策略可能由多个部门共同完成,如信息系统部门、人力资源部门、法律部门、以及金融部门等。
同一个安全策略可能应用于内部网络防护、邮件系统、远程访问系统,以及一个具体的平台系统。
因此在分布式系统中,策略交互非常重要。需要一种能够相互理解的策略描述语言,XACML(eXtensible Access Control Markup Language)语言就是为了解决策略描述问题而设计的。
XACML策略语言模型:
组合算法:
XACML策略语言是一种分布式策略语言,对于同一资源可能由不同的策略管理点(PAP)为其指定不同的策略。这些策略之间有可能存在冲突,如有的规则可能允许访问,有的规则可能不允许,这些冲突必须得到解决。也可能多条策略的执行效用一样,这样的策略只要执行一条即可得到相应的策略通用。通过XACML策略语言模型可以看出,一条策略可能包含多条规则,这些策略同样哟可能存在冲突或具有相同的效用。
因此在XACML语言中需要一个组合算法来解决冲突,并且避免不必要的运算。在XACML语言中,规定了4种类型的组合算法,及拒绝优先算法(Deny-overrides)、许可优先算法(permit-overrides)、首先应用算法(First-applicable)和唯一应用算法(only-one-applicable)。在这些算法种,除了唯一应用算法只适用于策略略组合外,其他适用于规则组合算法和策略组合算法。
1) 拒绝优先算法
拒绝优先算法的基本思想是一旦有一条规则或者策略应用得到一个拒绝的结果,则返回结果为拒绝(Deny);如果在处理某一规则或者策略过程种出现了错误,并且这个规则或者策略的效用(Effect)是拒绝,同时也没有其他规则或者策略的应用结果是拒绝,则返回结果为许可(Permit);如果应用所有的规则中没有一条规则或者策略可以应用,则返回结果为不可应用。(NotApplicable)
2) 许可优先算法
许可优先算法的基本思想是只要有一条规则或者策略的应用结果是许可(Permit),则返回结果是许可;如果在处理某一规则或者策略过程中出现了错误,并且这个规则或者的策略的效用(Effect)是许可,同时没有其他规则或者策略的应用结果是许可,则返回结果为不确定(Indeterminate);如果在处理过程中没有规则或者策略的应用结果为许可,同时至少有一条规则或者策略的应用结果是拒绝,而且在处理过程中效用为许可的规则或者策略没有出现错误,则返回结果为拒绝(Deny);如果应用所有的规则中没有一套规则或者策略可以应用,则返回结果为不可应用。(Notapplicable)
3) 首先应用算法
该算法的基本思想是在应用一组规则或者策略的过程中,如果有一条规则或者策略是可以应用(其结果可以得到许可或者拒绝),则算法立即停止,比你高返回这一条规则或者策略可以应用,则返回结果是不可应用;如果在处理规则或者策略的过程中报错,则返回结果是不确定的。
4) 唯一应用算法
唯一应用算法是只适用于与策略组合算法,他要求在策略中有且只有一条可以应用。
该算法的基本思想是如果策略中有且只有一条策略可以应用,则返回这条策略的应用结果;如果没有一条策略可以应用,则返回结果是不可应用;如果有多于一条策略可以应用,则返回结果是不确定的;如果在处理过程中有出错的情况,或者发现策略无效,则返回结果也是不确定的。
规则
从XACML策略语言模型图中可以看出,规则(Rule)是策略语言中一个重要的基本元素。为了更好的理解规则的含义,首先需要了解规则的基本组成部分及其之间的相互关系。
规则包括三个组成部分,即目标(Target)、效用(Effect)和条件(Condition)。
目标(Target)表示规则应用的对象,其中包括4个基本元素,即资源(Resource)、主体(Subject)、动作(Actions)和环境(Enviroment)。一个目标的基本含义是主体对资源执行的某些动作,这些动作是在一定的环境下执行的。在应用规则的时候,根据请求的主体、资源、动作,以及相关的环境因素来查找可以应用的规则。
效用表示规则应用后的结果,包括两个值,即许可(Permit)和拒绝(Deny)。效用的含义是如果某一个决策请求中的要素(包括主体、资源、动作和环境)和规则中的目标相同,并且效用是许可,则决策结果是许可;如果效用是拒绝,则巨册结果是拒绝。
同一规则可能有不同的应用环境,这样在决策时还需要一些辅助的额外信息,这些额外信息需要条件(Condition)来描述。条件是一些谓词结构,其结果是True或者False,通过这些条件可以描述主体、动作、资源,以及环境的一些属性和上下文信息(如操作的时间限制要求)
策略是基于XACML语言的访问控制框架中可以交互的最小单元,他由策略管理点产生并维护,策略决策点(PDP)依据相应的策略进行决策判断。
策略包括4个组成部分,即目标、组合算法、规则集和职责集。
一个策略的目标可以由管理人员在策略中明确规定,也可以从策略、策略集或者规则集中推导出来。一旦在策略中明确了目标,则所有规则中的目标都要忽略。
组合算法规定了策略中的规则组合算法。
规则集即策略中的一条或者多条规则组合。
职责集在应用规则的过程中由测录决策点(PDP)返回给策略执行点(PEP),除了执行相应的许可或拒绝操作外。策略执行点(PEP)还需要执行的一些职责,如需要记录相应的入职等
策略集
把多个策略描述组合在一起形成一个策略集,在XACML语言中,策略集用来描述同时引用多条策略的情况。
XACML上下文
XACML策略描述语言试图提供一种适合Internet环境下的策略描述和交换语言,但是具体的应用程序可能有其自身的特殊描述方式,应用程序环境下的请求可能有其自身的特殊描述方式,应用程序环境下的请求可能和XACML语言描述的请求有所区别。因此需要将特定应用程序环境的请求转换为XACML能够识别的请求,这就是XACML上下文的由来。
XACML上下文图:
特定应用程序域的请求通过上下文处理器转换为XACML上下文中的请求,在引用策略及决策判断的过程都是在XACML上下文中进行,处理后的XACML应答需要由上下文处理器转换为特定域的输出。
安全和隐私方面的考虑
1. 威胁模型
从XACML的访问控制框架中可以看出,要应用XACML实现访问控制需要多个角色之间的相互协作,如PEP、PDP及PAP等。假设敌方可以访问角色之间的通信信道,那么可能存在的威胁如下
i. 非授权信息泄露
XACML语言本身没有规定任何保护数据信息机密性的措施,因而存在非授权信息泄露威胁。这种威胁可能导致敌方能够获取通信中的信息,从而访问请求主体、资源或者动作的一些个人信息,这些信息对于个人来说属于隐私。
ii. 消息重放
消息重放攻击是指敌方记录并重放XACML角色之间的消息,通过应用过时信息,伪造信息或者直接发送记录信息,敌方可以发起拒绝服务攻击
XACML语言本身并没有在消息重放攻击预防方面由人户防范措施,在应用XACML时需要额外的安全保障措施配合。
iii. 消息插入
消息插入攻击是指敌方在CACML角色之间的交互信息中加入自己的消息
XACML语言本身没有防范措施,在应用XACML时需要额外的安全保障措施配合,如使用SSL等。
iv. 消息删除
消息删除攻击时指敌方删除XACML角色之间交互消息序列中的一条或多条消息,这样可能导致拒绝服务攻击。XACML语言本身没有防范消息删除攻击的任何措施,在应用XACML时需要配合采取额外的安全保障措施,如完整性保护措施等。
v. 消息修改
消息修改攻击是指敌方修改XACML角色之间交互的消息的内容,通过这样的修改,敌方可能改变访问控制决策结果,从而实现非授权访问。
vi. “没有应用”威胁
“没有应用”威胁是指策略决策点进行访问控制决策时,策略的目标和决策请求中的信息不匹配,这样得到访问控制决策结果时“没有应用”
一般情况下,没有策略可以应用,则意味着访问请求被拒绝。推荐使用这样一种处理方式。但是在一些安全模型中访问决策的结果是“没有应用”,则访问被允许,这样可能导致非授权的访问发生。
vii. “否定规则”威胁
“否定规则”是指规则发挥效用的条件是一些谓词结果不为真(true),该规则使用需要非常小心。如果使用不当,可能导致违背策略本意的事情发生,一些安全专家建议不要使用否定规则。但是在有些情况下,使用该规则使得规则的描述非常简单。XACML语言中允许使用否定规则,因此也带来了一些潜在的威胁。
2. 安全保障措施
i. 身份验证
身份验证机制提供了一种验证对方身份的手段,它既可以是单向的,也可以是双向的。如在访问控制过程中,PEP需要验证PDP的身份,以确保决策判断执行主体的可靠性。同时,PDP也需要验证PEP的身份,然后发送相关的决策信息。即使最简单的同意或者拒绝消息,敌方也可能从中推导出很多又用的信息。
存在多种技术可以实现身份验证,如VPN及数字签名等。身份验证可能需要在XACML的消息级或者会话级上实现
ii. 策略管理
如果策略的内容泄露给了访问控制系统以外的主体,则其可能应用这些策略来推导是否可以获取非授权的访问,而在XACML访问控制中使用分布式维护策略,这样的情况更容易发生。
为了防止这样的威胁,存放策略的敌方本身需要采取访问控制措施。
iii. 机密性保护
应用机密性保护机制可以只允许授权的接受者才可以独处消息中的内容,XACML机密性保护包括两部分的内容,即XACML角色通信过程的机密性保护和策略的机密性保护。
通信过程的机密性保护即保护XACML角色在交互过程中的信息机密性,防止非授权的信息泄露的威胁。实现机密性保护的技术由多种,如SSL等。
策略的机密性保护即保护策略中的部分信息加密。可以用XML加密技术实现,XML加密技术可以应用于全部或者部分XML文档的加密。
iv. 策略完整性保护
XACML策略是PDP用来评估XACML请求上下文的依据,是访问控制系统的核心,因此需要保护策略的完整性。策略完整性包括策略没有被修改过,以及策略没有添加或者删除过。完整性包括两个状态,一是静态的,即保存在某一处,如PAP的策略库中;而是动态的,即在XACML角色之间交互过程中。
可以应用XML签名技术来保护策略的完整性,该技术可以用来对XML文档中的部分或者全部内容实现完整性保护。
v. 策略标识符
策略可以通过标识符被别的策略引用,因此PAP需要维护策略标识符的唯一性,策略的维护人员应避免相同标识符的情况发生。
vi. 信任模型
所有的机密性、完整性保护措施中都需要一个信任模型,即如何确定用来加密或者签名的密钥就是可信的?由多种不同的信任模型可以使用,如严格的分层模型、桥接模型和信任网模型等。
vii. 隐私保护
需要着重声明的是,在任何和访问控制有关的事务处理过程中都可能泄露个人的隐私信息。如在一个策略中规定,只有金卡会员才能够访问。如果由主体访问成功,则泄露了其金卡成员的隐私信息。需要一种很好的机制来保护主体的隐私信息,但隐私保护机制的选择不是XACML规范的内容。
-
基于XACML的EPCIS访问控制模型 (2013年)
2021-05-26 02:17:21根据供应链系统对EPC信息服务(EPCIS)提出的访问控制需求,设计一种基于可扩展访问控制标记语言(XACML)的EPCIS访问控制模型。模型中的访问控制执行接口利用方法拦截技术实现对访问请求的拦截,并生成决策上下文对象。... -
xacml-3.0-core-spec-en翻译汇总.docx
2012-11-20 16:23:31xacml-3.0-core-spec-en翻译汇总.docx -
pam_xacml-开源
2021-05-03 17:37:05可扩展访问控制标记语言(XACML)允许XML格式的通用访问控制策略。 pam_xacml为许多现有的启用pam的应用程序提供XACML支持(无需更改代码)。 -
XACML实例和中文说明文档
2014-07-24 11:15:26代码直接导入Myeclipse就能运行, 运行 TestPDP文件即可得到结果 -
xacml简介和优点
2013-12-01 21:12:39xacml简介和优点 -
Xacml2.0/3.0 解析
2019-11-12 17:03:30经过测试,可以使用org.xacml4j下的xacml相关的包对xacml2.0/3.0文件进行解析,可以在maven中找到如下的包: <dependency> <groupId>org.xacml4j</groupId> <artifactId>xacml-core</...经过测试,可以使用org.xacml4j下的xacml相关的包对xacml2.0/3.0文件进行解析,可以在maven中找到如下的包:
<dependency>
<groupId>org.xacml4j</groupId>
<artifactId>xacml-core</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>org.xacml4j</groupId>
<artifactId>xacml-json</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>org.xacml4j</groupId>
<artifactId>xacml-test</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>org.xacml4j</groupId>
<artifactId>xacml-spring</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>org.xacml4j</groupId>
<artifactId>xacml</artifactId>
<version>1.3.2</version>
</dependency><dependency>
<groupId>org.xacml4j</groupId>
<artifactId>xacml-opensaml</artifactId>
<version>1.2.2</version>
</dependency><dependency>
<groupId>org.xacml4j</groupId>
<artifactId>xacml-conformance-tests</artifactId>
<version>1.3.2</version>
</dependency>其中有xacmltest的组件,组件中有例子,可以解析response, request,
而对于policy的解析可以通过反射得到:
这样,就基本得到了policy,request,response三种xacml的一个基本的解析。
也可以使用Sun的xacml来解析,但是Sun的很久没有更新了:
-
SAML和XACML在单点登录中的应用研究与实现 (2012年)
2021-04-24 03:16:19现代企业中出现的越来越多的应用系统往往各自提供一套身份认证方式...在对SAML和 XACML规范进行了分析的基础上,提出了一个基于SAML和XACML的单点登录模型,分析了该应用模型的安全性,最后在微软.NET平台上予以实现. -
基于XACML的Web服务访问控制应用探讨 (2009年)
2021-05-18 02:14:57首先对访问控制技术DAC、MAC和RBAC经行了分析, 接着对可扩展访问控制标记语言XACML及其访问控制模型的原理经行了研究, 最后提出了一种应用于动态电子商务中的基于XACML的WEB服务访问控制方案供探讨. -
xacml4j-opensaml:XACMLOpenSAML集成
2021-05-10 08:08:17XACML / OpenSAML集成 适用于项目的实现。 Travis CI上的持续集成状态: -
论文研究-基于XACML的策略评估优化技术的研究.pdf
2019-07-22 23:58:58为了提高XACML策略评估逐层匹配的效率, 在规则优化方面提出按规则的请求权重对规则进行排序的思想; 同时在策略评估方面提出XACML合并算法的优先级及主体的规则索引表, 优先选择符合匹配条件的策略和规则来提高匹配... -
基于XACML访问控制模型在Web服务中的应用.docx
2020-01-30 08:06:06XACML?访问控制模型在?Web?服务中的应用 摘要访问控制是信息系统保护中及其重要的组成 部分传统的访问控制机制缺少表示复杂访问策略的能力 而?XACML?规范解决了上述问题本文在研究?XACML?的 基础上阐述了基于?XACML?... -
access_control-xacml-2.0-core-spec-os
2013-05-02 17:49:23XACML文档。包括两个部分,一个是xacml2.0规范的文档,即access_control-xacml-2.0-core-spec-os.pdf,二是sun公司的xacml源码,即xacml解析器 -
access_control-xacml-2.0-core-spec-os (XACML规范 英文) 及源码
2010-02-24 17:00:16包括两个部分,一个是xacml2.0规范的文档,即access_control-xacml-2.0-core-spec-os.pdf,二是sun公司的xacml源码,即xacml解析器 -
XACML V3.0
2011-05-18 18:48:48是OASIS官网上的XACML标准,version 3.0的。 -
Automatic XACML Requests Generation for Testing Access Control Policies
2021-02-09 14:58:54Automatic XACML Requests Generation for Testing Access Control Policies -
论文研究-SAML和XACML相结合的Web服务访问控制模型 .pdf
2019-08-22 01:48:42SAML和XACML相结合的Web服务访问控制模型,赵玲,许峰,访问控制安全是Web服务安全体系结构中至关重要的一部分。本文对SAML和XACML相关规范进行研究,将二者结合实施访问控制,构造了一个应