为什么这个 LDAP 查询 return 一个只有 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
) 格式不正确。如果您尝试从给定帐户名的 LDAP 检索用户对象,您可以使用如下搜索过滤器:(sAMAccountName=UID)
为了更好地了解可能出现的问题,您可以使用 ldap_error 并在连接后调用它:echo "Error: ".ldap_error($ldap);
。您可以在任何与 LDAP 相关的调用之后执行此操作,以获取有关可能出现问题的更多信息。
我是 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
) 格式不正确。如果您尝试从给定帐户名的 LDAP 检索用户对象,您可以使用如下搜索过滤器:(sAMAccountName=UID)
为了更好地了解可能出现的问题,您可以使用 ldap_error 并在连接后调用它:echo "Error: ".ldap_error($ldap);
。您可以在任何与 LDAP 相关的调用之后执行此操作,以获取有关可能出现问题的更多信息。