Unboundid 未返回请求的 LDAP 属性。为啥?
Posted
技术标签:
【中文标题】Unboundid 未返回请求的 LDAP 属性。为啥?【英文标题】:Unboundid not returning requested LDAP attributes. Why?Unboundid 未返回请求的 LDAP 属性。为什么? 【发布时间】:2014-02-13 23:54:04 【问题描述】:我编写了一个程序,它读取一个 web 服务,检索用户数据,然后应该将该数据推送到 ActiveDirectory,从而更新用户的标题、地址、电话号码等。
问题是当我使用 Unboundid Connection 类执行搜索时,请求的属性没有返回。以下是搜索代码:
SearchResult result = connection.search( properties.getProperty("ldap.search.baseDN"),
SearchScope.SUB, "(cn=" + userId + ")",
"personalTitle", "department", "company", "manager", "telephoneNumber",
"streetAddress", "I", "st", "postalCode", "c", "pager", "mobile",
"fax", "cn");
以上代码定位到想要的用户,按预期返回了cn属性,但是其他属性都没有返回。如果我使用 JXplorer 使用相同的连接凭据连接到 AD,我可以看到所有需要的属性都存在,但根本没有返回。
我尝试替换 SearchRequest.ALL_OPERATIONAL_ATTRIBUTES、SearchRequest.ALL_USER_ATTRIBUTES 和 SearchRequest.REQUEST_ATTRS_DEFAULT 而不是明确列出字段,但没有成功。
我还查看了从“connection.getSchema()”返回的“Schema”对象,可以看到personalTitle 应该存在:
connection.getSchema().getAttributeType("personalTitle")
以上代码返回:
1.2.840.113556.1.2.615 NAME 'personalTitle' 语法 '1.3.6.1.4.1.1466.115.121.1.15' 单值
所以也许这是一个用户权限问题?有没有人遇到过这种情况并知道如何解决?
谢谢, 迈克
【问题讨论】:
【参考方案1】:LDAP 搜索结果条目仅包含实际具有值的属性,因此您从 UnboundID LDAP SDK 看到的行为是适当且正确的。即使您明确请求特定属性,该属性也只有在具有一个或多个值时才会包含在条目中。
我认为您对 JXplorer 感到困惑,因为它正在读取模式以确定哪些属性可能包含在基于其对象类的条目中,并向您显示这些属性,以便您可以在编辑。但这并不意味着服务器返回的条目实际上包含有关这些属性的任何信息。
要验证这一点,您可以使用随 LDAP SDK 提供的 ldap-debugger 工具来查看发生的实际 LDAP 通信。只需运行如下命令:
tools/ldap-debugger --hostname directory-server-address \
--port directory-server-port --listenPort listen-port
这将创建一个非常简单的 LDAP 代理服务器,用于解码通过它的所有请求和响应。要使用它,只需将 JXplorer 指向指定的监听端口。您会看到,当 JXplorer 检索条目时,服务器返回的条目将只包含实际具有值的属性。
如果您想找出可以包含在给定条目中的所有可能属性,请使用 LDAPConnection.getSchema 方法检索服务器架构,然后使用 Schema.getObjectClass 检索目标中的每个对象类条目,最后使用 ObjectClassDefinition.getRequiredAttributes 和 ObjectClassDefinition.getOptionalAttributes 方法来查看在具有该对象类的条目中必须和可以使用的属性类型。
【讨论】:
您先生在这方面知识渊博!万分感谢。我尝试了 connection.getSchema() 并验证了我希望填充的字段是否可用。正如您所说,它们目前没有任何价值。以上是关于Unboundid 未返回请求的 LDAP 属性。为啥?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 UnboundID SDK 连接带有 SSL 服务器证书的 LDAP 服务器?
如何将所有 memberOf 属性分配给 LDAP 中的特定用户