【问题标题】:WSOS Identity - PIP Extension with a Set of Multiple Elements Returns BlankWSOS 身份 - 具有一组多个元素的 PIP 扩展返回空白
【发布时间】:2016-02-17 04:24:39
【问题描述】:

我们的测试表明,WSO2 PIP 扩展模块实现了一个与 PDP 集成 (=AttributeFinder) 连接的“Set”类。该接口目前只能传输单个元素。 一旦我们对我们的组定义使用自定义查找,生成具有多个字符串类型的元素 的集合,WSO2 PDP 将返回一个没有任何信息的 空白 字符串。

来自 WSO2 的示例代码:

@Override
    public Set<String> getAttributeValues(String subject, String resource, String action,
                                  String environment, String attributeId, String issuer) throws Exception {

        Set<String> roles = new HashSet<String>();
        String role = findRole(subject);
        if(role != null){
            roles.add(role);
        }

        return roles;
    }    

PIP 扩展示例源码下载:

https://svn.wso2.org/repos/wso2/carbon/platform/trunk/components/identity/org.wso2.carbon.identity.samples.entitlement.pip/src/main/java/org/wso2/carbon/identity/samples/entitlement/pip/

我们的查找程序使用基于字符串的数据类型,它与元素的数据类型相匹配,请参见下面的 XACML 代码: .

<AttributeDesignator Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject" AttributeId="http://w3.red.com/subject/groupsUserBelong" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"></AttributeDesignator> 

访问组处理是 XACML 逻辑处理中非常常见的任务,因此这是实现 XACML 策略和规则的关键功能。

这种失败行为是一个错误(返回空白),还是 WSO2 XACML 使用多个字符串元素为 Set 提供编程实现,根据数据元素的数量自动生成一个字符串包,每个元素一个字符串?

要完成分析,请同时查看上面的示例代码 作为名为 AbstractPIPAttributeFinder 的匹配抽象类。 两者都引用名为“角色”的返回值,在抽象类中将其描述为“值”。一旦要返回的对象被定义为 Set 并且字段名称以复数形式描述它,它基本上自我解释传输的值可以是作为 Set 构造一部分的一个或多个元素,通常是 String 数据的每个元素-类型。

该逻辑适用于单个元素,但在使用时失败 多个元素,在 XACML 接口返回“空白”字符串代替“字符串包”。

【问题讨论】:

    标签: wso2 identity xacml


    【解决方案1】:

    在详细分析了 PIP 数据流经模块后,我们在 PIP 扩展程序内部圈出了问题。您可以在下面找到用于寻址和传输数据字段的逻辑。新逻辑能够传输多个元素(例如组或角色),这些元素已通过 ObligationExpression 以及 String-bag 比较进行了测试,这些元素在部署新扩展代码后均成功执行。

    public Set<String> getAttributeValues(String subject, String resource,
                    String action, String environment, String attributeId, String issuer)
                    throws Exception {
    
                Set<String> myHash = new HashSet<String>();
                Map<String, String> myMap = null;
                if (attributeId.trim().equalsIgnoreCase("http://w3.red.com/subject/versionOfPIP")) {
                    myHash.add(myversion.toString().trim());
                    System.out.println(myversion.toString().trim());
    
                } else if (attributeId.trim().equalsIgnoreCase("http://w3.red.com/subject/groupsUserBelong")) {
                    String myGroups = RedRedGroupAttrFinder.
                            getOnlyGroups(RedRedGroupAttrFinder.redGroupHTTPsSlaphAPI(subject));
                    ArrayList<String> myGroupsArrayL =RedRedGroupAttrFinder.convertStringToArraylist(myGroups);
                    for (String element : myGroupsArrayL) {
                        myHash.add(element.toString().trim());
                        }
    
                } else if (attributeId.trim().equalsIgnoreCase("http://w3.red.com/subject/employeeCountryCode")) {
                    myMap = LdapHash.searchRedPagesByIntranetEmail(subject);
                    myHash.add(myMap.get(attributeId.substring(26).toString().trim()));
    
                } else {
                    myHash.add("never");
                }
    
                return myHash;
            }
    } 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-23
      • 1970-01-01
      • 2014-06-18
      • 2019-10-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多