WSO2 Identity Server - 如何为扩展PIP编写XACML策略

时间:2015-09-24 21:16:32

标签: authorization wso2is access-control xacml abac

使用" RedAttributeFinder"的PIP扩展码上课现在正在工作。它正确地将其声明注册到WSO2 PDP扩展控制台显示屏。

我现在开始创建一个XACML策略,解决返回扩展程序提供的动态数据值的字段(例如名为" http://w3.red.com/subject/employeeCountryCode")的字段。

数据查找的关键字段是:urn:oasis:names:tc:xacml:1.0:resource:resource-id ,以电子邮件格式映射用户身份。

问题1:如何在" RedAttributeFinder"中完成“getAttributesValues”方法的调用。在WSO2开始时注册的课程。什么触发PDP进程(或其传入请求)的方法调用?

在示例代码中,以及在我的实现中,关键字段是resource-id,它作为PEP请求实现的一部分加载。

..
myRequest += "<Attributes Category=\"urn:oasis:names:tc:xacml:1.0:subject-category:access-subject\">" + "\n"; 
myRequest += "<Attribute AttributeId=\"urn:oasis:names:tc:xacml:1.0:subject:subject-id\" IncludeInResult=\"false\">" + "\n"; 
myRequest += "<AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">tony@br.red.com</AttributeValue>" + "\n"; 
myRequest += "</Attribute>" + "\n";  
myRequest += "</Attributes>" + "\n"; 
myRequest += "<Attributes Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\">" + "\n"; 
myRequest += "<Attribute AttributeId=\"urn:oasis:names:tc:xacml:1.0:resource:resource-id\" IncludeInResult=\"true\">" + "\n"; 
.. 

这是&#34; getAttributesValues()&#34;的关键输入。并将返回一个国家代码(类似于WSO2示例代码中的角色[蓝色,银色,金色]定义[可在此处https://svn.wso2.org/repos/wso2/carbon/platform/trunk/components/identity/org.wso2.carbon.identity.samples.entitlement.pip/]。

在示例中,我看到角色值所需的分辨率,例如&#34; blue&#34;是策略目标定义的一部分。

问题2:此目标部分内的展示位置是否需要调用动态PIP查找,每个请求一个,或者也可以将其放置在策略的其他部分,例如在规则内?

我能够通过定义静态变量,接收&#34; permit&#34;来测试PEP到PDP与规则定义的交互,我希望将规则更改为从PIP获得的动态数据实现及其扩展,解决代码添加的新字段。

2 个答案:

答案 0 :(得分:0)

在符合XACML标准的标准实现中,PDP将在其策略中找到属性指示符的任何时候调用PIP,该策略也由PIP发布(这意味着PIP必须通告它可以提供哪些属性,例如它提供了角色,公民身份......)。

PDP可以选择不调用PIP并使用属性缓存。在策略中放置属性是无关紧要的。无论属性是在目标内还是在条件中使用都无关紧要 - 至少根据规范 - 这就是Axiomatics,SunXACML和ATT引擎的工作方式。

干杯, 大卫。

答案 1 :(得分:0)

通过在log4j.properties文件中添加以下行,我在WSO2设置中找到了一个有用的调试选项:

log4j.logger.org.wso2.carbon.identity.entitlement=DEBUG

此命令开始跟踪发送到PIP的请求,包括调用PIP扩展类(按属性指示符)和返回数据字段。

这证实了PDP动态调用PIP以及Try-It功能。以下政策提供了预期的&#34;许可证&#34;并且&#34;拒绝&#34;结果,通过这确认了PIP扩展程序的正常运行。

下面是一个非常简单的策略,它使用PIP扩展代码测试,获取名为:employeeCountryCode的数据变量的值。

<强>政策

<Policy xmlns="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17"  PolicyId="RedLDAPPolicy1" RuleCombiningAlgId="urn:oasis:names:tc:xacml:3.0:rule-combining-algorithm:permit-overrides" Version="1.0">
<Target>
</Target>
<Rule Effect="Permit" RuleId="Permit-Rule1">
<Target>
<AnyOf>
<AllOf>
<Match MatchId="urn:oasis:names:tc:xacml:1.0:function:string-equal">
<AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">631</AttributeValue>
<AttributeDesignator AttributeId="http://w3.red.com/subject/employeeCountryCode" Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="true">
</AttributeDesignator>
</Match>
</AllOf>
</AnyOf>
<AnyOf>
<AllOf>
<Match MatchId="urn:oasis:names:tc:xacml:1.0:function:string-equal">
<AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">ldap</AttributeValue>
<AttributeDesignator AttributeId="urn:oasis:names:tc:xacml:1.0:resource:resource-id" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="true">
</AttributeDesignator>
</Match>
</AllOf>
</AnyOf>
<AnyOf>
<AllOf>
<Match MatchId="urn:oasis:names:tc:xacml:1.0:function:string-equal">
<AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">read</AttributeValue>
<AttributeDesignator AttributeId="urn:oasis:names:tc:xacml:1.0:action:action-id" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:action" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="true">
</AttributeDesignator>
</Match>
</AllOf>
</AnyOf>
</Target>
</Rule>
<Rule Effect="Deny" RuleId="Deny-Rule">
</Rule>
</Policy>

请求

<Request xmlns="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17" CombinedDecision="false" ReturnPolicyIdList="false">
<Attributes Category="urn:oasis:names:tc:xacml:3.0:attribute-category:action">
<Attribute AttributeId="urn:oasis:names:tc:xacml:1.0:action:action-id" IncludeInResult="false">
<AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">read</AttributeValue>
</Attribute>
</Attributes>
<Attributes Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject">
<Attribute AttributeId="urn:oasis:names:tc:xacml:1.0:subject:subject-id" IncludeInResult="false">
<AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">tony@br.red.com</AttributeValue>
</Attribute>
</Attributes>
<Attributes Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource">
<Attribute AttributeId="urn:oasis:names:tc:xacml:1.0:resource:resource-id" IncludeInResult="true">
<AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">ldap</AttributeValue>
</Attribute>
</Attributes>
</Request>