0

使用“RedAttributeFinder”类的 PIP 扩展代码现在正在工作。它正确地将其声明注册到 WSO2 PDP 扩展控制台显示中。

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

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

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

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

..
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"; 
.. 

这是“getAttributesValues()”的关键输入,将返回一个国家代码(类似于 WSO2 示例代码中的角色 [blue, silver, gold] 定义 [可在此处获取https://svn.wso2.org/repos /wso2/carbon/platform/trunk/components/identity/org.wso2.carbon.identity.samples.entitlement.pip/ ]。

在示例中,我看到角色值所需的解析,例如“蓝色”是策略目标定义的一部分。

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

我能够使用规则定义测试 PEP 到 PDP 的交互,仅通过定义静态变量,接收“许可”,我想更改为从 PIP 实现及其扩展获得的动态数据的规则,解决新的问题代码添加的字段。

4

2 回答 2

0

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

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

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

这证实了 PIP 以及 Try-It 函数是由 PDP 动态调用的。通过确认 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>
于 2015-09-25T17:47:49.523 回答
0

在符合 XACML 标准的标准实现中,只要 PDP 在其策略中发现一个也由 PIP 发布的属性指示符,它就会调用 PIP(这意味着 PIP 必须宣传它可以提供哪些属性,例如它提供角色,公民身份...)。

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

干杯,大卫。

于 2015-09-25T14:10:04.580 回答