我将从LDAP服务器检索用户信息。客户发送了以下3个数据:
这是我第一次使用LDAP,所以我研究了它。我看到我必须使用一些参数,如cn,dc,ou。客户不应该提供此信息吗?或者客户的信息就足够了,我可以通过显示文件夹结构的代码找到这些参数吗?
答案 0 :(得分:0)
您想要查看的结构称为目录树,由LDAP“条目”(不是文件夹)构成。
如果您获得的凭据足够,您应该可以从目录中收集条目。为此,您需要一个客户端库,您可以使用Perl LDAP。
使用该库可以执行以下操作:
use Net::LDAP;
# Init connection and bind to the directory.
$ldap = Net::LDAP->new('ldaphost.example.com') or die "$@";
$mesg = $ldap->bind ($binddn, password => $password);
# Perform a search on the whole tree below (and including) the base object.
$mesg = $ldap->search(base => $basedn);
# Handle error
$mesg->code && die $mesg->error;
# Display results
foreach $entry ($mesg->entries) { $entry->dump; }
$mesg = $ldap->unbind;
上面的代码只是将条目打印到stdout($ entry-> dump)。
$binddn
是要进行身份验证的dn。如果您已经获得了一个不是dn的简单用户名,例如“用户名”而不是uid=username,dc=example,dc=com
,那么这可能意味着您正在处理Active Directory。在这种情况下,您可以尝试使用与以下模式对应的binddn进行绑定:'username@example.com'
。basedn
是基础对象条目的dn,搜索是在下面(并包括)基础对象的整个树上执行的。您必须指定有效的基数dn。 您可以尝试猜测要使用哪个基本dn。域组件(dc)通常与FQDN匹配,但不保证它会产生有效的基数dn(例如'ldaphost.example.com'
会给出'dc=example,dc=com'
)。但是,您可以在服务器中查询rootDSE信息并检索namingContexts
(或defaultNamingContext
,如果有的话),并使用其中一个作为基础dn:
$ldap->search(base => '', attrs => 'namingContexts');
也就是说,如果你真的想要显示目录树,最好使用像Apache Directory Studio这样的LDAP资源管理器。
请注意,LDAP不仅限于以严格的“树”结构存储信息,它只需要尊重目录信息树(DIT)的命名法。