【问题标题】:Import WSO2 Identity Server default schemas into OpenLDAP将 WSO2 身份服务器默认模式导入 OpenLDAP
【发布时间】:2016-09-03 18:56:54
【问题描述】:

我正在尝试使用 OpenLDAP 作为主要用户存储来设置 WSO2 身份服务器。我想将 Idp 嵌入式 ApacheDS 架构:wso2Person、identityPerson 和 scimPerson 添加到 OpenLDAP,但我既无法导入架构也无法导入 wso2Person、identityPerson 和 scimPerson ldif 文件。

您能否举例说明如何实现这一目标?

我正在尝试使用 ApacheDS Studio 或其他 LDAP 客户端将文件导入 Ubuntu Server 16 LTS 上的新 OpenLDAP,但每次我尝试导入文件时都会引发错误。

IE:启动

sudo ldapadd -Q -Y EXTERNAL -H ldapi:/// -f ou\=schema.ldif

服务器响应:

服务器不愿意执行 (53) 没有全局优势

或者,尝试导入 wso2Person.ldif

ldapadd -D ldap:/// -D "cn=admin,dc=example,dc=org" -x -W -f wso2Person.ldif

抛出以下错误:

无效语法 (21) 附加信息:attributeTypes: value #0 invalid per syntax

【问题讨论】:

    标签: wso2 openldap apacheds


    【解决方案1】:

    首先:如果您在 Ubuntu 16.04 上使用默认 OpenLdap 配置,则必须使用服务器 root 帐户的本地工具。例如:

    root@OpenLdap1:ldapadd -Y EXTERNAL -H ldapi:/// -f identityPerson.ldif
    

    您可以看到 cn=config 的访问列表是:

    # {0}config, config
    dn: olcDatabase={0}config,cn=config
    objectClass: olcDatabaseConfig
    olcDatabase: {0}config
    olcAccess: {0}to * by dn.exact=gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth manage by * break
    

    第二:你必须修改 wso2 给出的 ldif 文件。在 OpenLdap 中,模式被表示为单独的 LDAP 对象,因此您必须创建一个新条目,而不是修改对象。语法上还有一个区别——你应该用 olcAttributeTypes 替换 attributeTypes,用 olcobjectClasses 替换 objectClasses。你的 wso2Person.ldif 看起来像:

    dn: cn=wso2Person,cn=schema,cn=config
    objectClass: olcSchemaConfig
    cn: wso2Person
    olcAttributeTypes: ( 1.3.6.1.4.1.37505.1.2
        NAME 'gender'
        EQUALITY caseIgnoreMatch
        SUBSTR caseIgnoreSubstringsMatch
        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{1024} )
    ....
    olcAttributeTypes: ( 1.3.6.1.4.1.37505.1.13
        NAME 'prefferedLanguage'
        EQUALITY caseIgnoreMatch
        SUBSTR caseIgnoreSubstringsMatch
        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{1024} )
    olcobjectClasses: ( 1.3.6.1.4.1.37505.1.1
        NAME 'wso2Person'
        DESC 'wso2Person'
        SUP inetOrgPerson
        STRUCTURAL
        MAY  ( gender $ country $ nickName $ timeZone $ dateOfBirth $ role $ im $ url $ otherPhone $ privatePersonalIdentifier $ profileconfiguration $ prefferedLanguage) 
    )
    

    wso2 类也有结构依赖,所以它们的添加顺序很重要:

    ldapadd -Y EXTERNAL -H ldapi:/// -f wso2Person.ldif 
    ldapadd -Y EXTERNAL -H ldapi:/// -f scimPerson.ldif 
    ldapadd -Y EXTERNAL -H ldapi:/// -f identityPerson.ldif 
    

    【讨论】:

      【解决方案2】:

      没有必要使用 wso2Person 模式。您可以使用外部 ldap 支持的任何模式(例如:inetOrgPerson)。您只需对 openldap 模式中具有现有属性的属性进行声明映射。您可以在“http://wso2.org/claims”下的配置->声明管理选项卡中找到此声明。您可以使用 ldap 服务器中的现有属性为每个属性编辑声明映射 [1]。例如:名字映射到主用户存储中的属性“givenName”。 Openldap 还支持“givenName”属性类型。因此,您不必更改这些属性。但是,如果没有将正确的对象类添加到用户组,则很少有属性,例如映射到主用户存储中的“sn”的“姓氏”,不在默认的 openldap 中。例如,我使用“displayName”作为辅助用户存储的映射属性。您可以在附加的图像 claim.png 中查看如何编辑声明(其中 NEWTEST 是次要用户存储名称)以添加声明映射。因此,像这样,您必须将这些属性映射到 openldap 模式中的现有属性。

      [1] - https://docs.wso2.com/display/IS500/Editing+Claim+Dialects

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-07-22
        • 2012-11-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多