ApacheDS

时间:2016-09-25 12:26:02

标签: java ldap apacheds apache-directory

我正在使用ApacheDS作为LDAP服务器。我需要一些组来管理不同应用程序的权限。例如,一个名为“jira-users”的组,可以登录jira。所以我需要一个属性,我可以存储用户的成员组。我正在使用名为inetOrgPerson的objectClass,它似乎可以存储用户。

从过去我正在处理的Active Directory中,我记得一个名为 memberOf 的属性。似乎这是AD特定的,因为inetOrgPerson类有一个名为 member 的属性。根据文档,它也是如此:存储用户所在的组。但是当我尝试将其添加到inetOrgPerson对象时,我在Apache Directory studio中收到以下错误:

  

警告!根据方案不允许此属性!   你还想用吗?

当我尝试按时,我得到以下异常:

  

FehlerbeimAusführendesLDIF     - [LDAP:错误代码65 - OBJECT_CLASS_VIOLATION:MessageType失败:MODIFY_REQUES java.lang.Exception:[LDAP:错误代码   65 - OBJECT_CLASS_VIOLATION:MessageType失败:MODIFY_REQUEST   消息ID:262       修改请求           对象:'cn = Testuser,ou = user,dc = example,dc = com'               修改[0]                   操作:添加                   修改成员:cn = Testgruppe,ou = user,dc = example,dc = comorg.apache.directory.api.ldap.model.message.ModifyRequestImpl @ 868031e2:   ERR_277属性成员未在entryClasses的条目中声明   cn = Testuser,ou = user,dc = example,dc = com] at   org.apache.directory.studio.connection.core.io.api.DirectoryApiConnectionWrapper.checkResponse(DirectoryApiConnectionWrapper.java:1268)     在   org.apache.directory.studio.connection.core.io.api.DirectoryApiConnectionWrapper.access $ 9(DirectoryApiConnectionWrapper.java:1236)     在   org.apache.directory.studio.connection.core.io.api.DirectoryApiConnectionWrapper $ 4.run(DirectoryApiConnectionWrapper.java:716)     在   org.apache.directory.studio.connection.core.io.api.DirectoryApiConnectionWrapper.runAndMonitor(DirectoryApiConnectionWrapper.java:1163)     在   org.apache.directory.studio.connection.core.io.api.DirectoryApiConnectionWrapper.checkConnectionAndRunAndMonitor(DirectoryApiConnectionWrapper.java:1099)     在   org.apache.directory.studio.connection.core.io.api.DirectoryApiConnectionWrapper.modifyEntry(DirectoryApiConnectionWrapper.java:738)     在   org.apache.directory.studio.ldapbrowser.core.jobs.ImportLdifRunnable.importLdifRecord(ImportLdifRunnable.java:515)     在   org.apache.directory.studio.ldapbrowser.core.jobs.ImportLdifRunnable.importLdif(ImportLdifRunnable.java:272)     在   org.apache.directory.studio.ldapbrowser.core.jobs.ExecuteLdifRunnable.executeLdif(ExecuteLdifRunnable.java:157)     在   org.apache.directory.studio.ldapbrowser.core.jobs.ExecuteLdifRunnable.run(ExecuteLdifRunnable.java:123)     在   org.apache.directory.studio.ldapbrowser.core.jobs.UpdateEntryRunnable.run(UpdateEntryRunnable.java:59)     在   org.apache.directory.studio.connection.ui.RunnableContextRunner $ 1.run(RunnableContextRunner.java:116)     在   org.eclipse.jface.operation.ModalContext $ ModalContextThread.run(ModalContext.java:119)

     

[LDAP:错误代码65 - OBJECT_CLASS_VIOLATION:失败   MessageType:MODIFY_REQUEST消息ID:262       修改请求           对象:'cn = Testuser,ou = user,dc = example,dc = com'               修改[0]                   操作:添加                   修改成员:cn = Testgruppe,ou = user,dc = example,dc = comorg.apache.directory.api.ldap.model.message.ModifyRequestImpl @ 868031e2:   ERR_277属性成员未在entryClasses的条目中声明   CN = TESTUSER,OU =用户,DC =例如,DC = COM]

我尝试使用ldapadd添加它,如此处所述http://morenews.blogspot.de/2010/12/adding-active-directory-properties-to.html。这给了我没有错误,当我看到ou = schema,cn = other,ou = objectClasses我看到我的插入值。但是当我创建一个新的inetOrgPerson时,没有可能使用它!我做错了什么?

1 个答案:

答案 0 :(得分:0)

实际上,member属性类型不存储用户所属的组#34;相反,它包含列表或组中对象的可分辨名称。

inetOrgPerson对象类不会也不应该拥有任何"成员"属性,groupOfNames确实甚至需要它,因为它代表了一组存储在" member"中的命名对象。属性。

(见RFC 4519RFC 2798

我想你想要的是将 memberOf 属性添加到inetOrgPerson。为此,您需要定义" memberOf"属性类型并编辑模式中的inetOrgPerson对象类。您必须首先添加属性类型,因为对象类引用它。

(另见:Adding Schema Elements in Apache DS