繁体   English   中英

为什么此LDAP查询返回的数组只有0

[英]Why does this LDAP query return an array with just a 0

我是LDAP和Active Directory的新手。 我正在尝试使用以下代码来获取经过身份验证的用户的电子邮件ID。 但是,当我运行它时,我得到的只是一个带有0的数组。

这是代码

$server ='ldaps://DOMAIN'; 
$username = 'DOMAIN\UID'; 
$password = 'PASSWORD';

$base_dn = 'dc=DOMAIN';
$search_filter = 'dn=UID'; 
$attributes = ['mail']; 

$ldap = ldap_connect($server);
ldap_set_option($ldap, LDAP_OPT_REFERRALS, 0);
ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_bind($ldap, $username, $password); 
$search = ldap_search($ldap, $base_dn, $search_filter, $attributes);
$data = ldap_get_entries($ldap, $search);

foreach($data as $dataPoint)
    {
        echo $dataPoint;
        echo "<hr>";
    }

这仅输出0,并且在其下方有一条水平线。

这里最具挑战性的是,没有任何错误消息,并且我对LDAP和Active Directory不太熟悉。

关于为什么会发生这种情况的任何想法。

我从上面的代码中看到了可能导致问题的几件事:

  • 您真的要使用ldaps://吗? 通常这不是您想要的。 如果要使用加密连接,则应使用ldap_start_tls,并且应在ldap_connect之后进行调用。 为了进行测试,我将其更改为ldap://
  • 您的$base_dn变量似乎缺少域的一部分。 那不应该是您域的NETBIOS名称,而应该是完全合格的域名。 因此,如果您的域是domain.com则基本dn将为dc=domain,dc=com
  • 您的搜索过滤器( $search_filter$search_filter不正确。 如果您尝试从给定帐户名的LDAP中检索用户对象,则可以使用类似以下的搜索过滤器: (sAMAccountName=UID)

若要更好地了解可能出了什么问题,可以使用ldap_error并在连接后调用它: echo "Error: ".ldap_error($ldap); 您可以在任何与LDAP相关的调用之后执行此操作,以获取有关可能出错的更多信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM