我正在建立与用户/员工的Active Directory列表的连接。我是通过.NET完成的,但是无法在我的PHP应用程序中使用它。
我一直得到0分。
我尝试过使用samaccountname和sAMaccountname作为过滤器,这不会改变结果。
我成功连接,因为更改$ ldap将不再找到服务器。
我使用的是有效凭据,因为更改$ authUser或$ authPath会提供授权的错误消息。
ldap_bind(我推测)正在工作,因为它确实执行搜索并输出0的计数。
这是我的代码:
<?php
try{
$ldap = "vmc-dc.CompanyName.vmc";
$authUser = "vmc\\MyUsername";
$authPass = "MyPassword";
$baseDn = "dc=vmc-dc,dc=CompanyName,dc=com";
$filter="(&(objectClass=user)(samaccountname=*))";
$conn = ldap_connect($ldap, 389) ;
if ($conn) {
ldap_set_option($conn, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($conn, LDAP_OPT_REFERRALS, 0);
// binding to ldap server
$ldapbind = ldap_bind($conn, $authUser, $authPass);
// verify binding
if ($ldapbind) {
//$sr=ldap_read($conn, $baseDn, $filter);
$sr=ldap_search($conn, $baseDn, $filter);
$number_returned = ldap_count_entries($conn,$sr);
echo "Count: " . $number_returned . "<br/>";
$entry = ldap_get_entries($conn, $sr);
ldap_close($conn);
echo "value = '" . $entry[0] . "'";
} else {
echo "LDAP conn ok...";
}
}
} catch (Exception $e) {
}
?>
答案 0 :(得分:0)
我想知道你的过滤器是否过于宽泛,所有用户类对象(包括计算机,还有Brian Desmond的观点)并且返回了1000多个找到的对象。在这种情况下,AD将出错,并且不返回任何内容。我希望你会得到一个返回的错误,所以这可能不太可能。但是,更有限的过滤器和/或使用独立LDAP工具的重复可以帮助验证这一想法。