如何在LDAP中将域名转换为专有名称(DN)?

时间:2013-04-15 11:07:25

标签: java ldap distinguishedname opendj

我正在创建一个能够使用OpenDJ Client SDK登录LDAP服务器的java应用程序,但我只有域名用户名(也称为SAMAccountName)和密码。如果您不知道域名登录,请参阅此图片:

enter image description here

您输入的格式为:DOMAIN_NAME \ USER_NAME,而不是普通的USER_NAME。域名示例为:corp.fabrikam.com。


现在我需要知道如何将域名转换为专有名称(DN)?因为OpenDJ需要专有名称才能连接到LDAP。

例如:corp.fabrikam.com的专有名称是:dc = corp,dc = fabrikam,dc = com。

似乎我只需要将它拆分为“。”,但我听说有一种叫做Disjoint Domain的东西:
http://technet.microsoft.com/en-us/library/cc731125%28v=ws.10%29.aspx

因此,分裂技巧在这里可能不可靠。

此外,LDAP中的用户可以位于组织单位(OU)下。假设用户 john 属于管理员 OU,因此john的完整用户DN将如下所示:

uid = john,ou = manager,dc = corp,dc = fabrikam,dc = com

1 个答案:

答案 0 :(得分:2)

您应始终参考ldap服务器的RootDSE条目以获取有关您要连接的环境的信息。任何人都可以通过匿名绑定(或特定用户,只要您受到约束,它并不重要)读取RootDSE条目。它包含很多有趣的东西,你要找的是defaultNamingContext。

绑定后,对空字符串的DN执行ldap读取操作:''。如果您选择的框架提供了一些API来读取rootDSE,请尝试使用它。它可能会简单得多。

这可能有助于您获得kickstart: http://opendj.forgerock.org/opendj-ldap-sdk/apidocs/index.html 我没有在opendj文档页面上找到任何提及defaultNamingContext的内容,但您可能只是通过getNamingContexts()方法获取您要查找的信息。

请注意,rootDSE是一个ldap功能,它不是特定于实现的。