LDAP连接AD域失败原因分析
Windows域管理机制AD是LDAP协议的一种实现,通过LDAP的接口可以实现对AD的编程,很多项目的同一用户管理都会用到AD域管理,比如虚拟化平台项目。下面是使用LDAP的API连接AD域时出现的问题,供大家借鉴。
点击(此处)折叠或打开
-
<?php
-
// using ldap bind
-
-
$ldaprdn = "oa\zhangsan"; // ldap rdn or dn
-
-
$ldappass = "ad123456"; // associated password
-
-
// connect to ldap server
-
$ldapconn = ldap_connect("rd.nic.ac.cn")
-
or die("Could not connect to LDAP server.");
-
if ($ldapconn) {
-
// binding to ldap server
-
-
echo "come on!".$ldapconn;
-
echo "你不好!";
-
$ldapbind = ldap_bind($ldapconn);
-
//$ldapbind = ldap_bind($ldapconn,$ldaprdn,$ldappass);
-
-
// verify binding
-
if ($ldapbind) {
-
echo "LDAP bind successful...";
-
} else {
-
//echo ldap_error($ldapconn);
-
-
echo "LDAP bind failed...";
-
}
-
}
- ?>
错误内容:
点击(此处)折叠或打开
come on!Resource id #2你不好!
Warning: ldap_bind(): Unable to bind to server: Can't contact LDAP server in E:\www\web\testLDAP.php on line 10
LDAP bind failed...
1、ldap_connect():当连接成功时,返回一个正的连接标示符,连接错误就返回false。当使用openLDAP 2.x.x,ldap_connect()总是返回一个资源标示符,但是并没有真正连接,只是初始化了一些基本参数,在执行一些ldap_*函数时,通常是ldap_bind,才会真正连接。
2、搭建AD环境,需要建立一个DNS域服务器,所以在连接AD时ldap_connect(域名),该域名必须能找到(能够ping通该域名),也就是需要配置本机的DNS为AD环境中DNS域服务器的IP,这样就能连接上AD了。
3、另外可以直接通过连接AD域中DNS服务器的IP,修改$ldapconn = ldap_connect ("rd.ncic.ac.cn")为$ldapconn = ldap_connect()。
问题:
根据程序的逻辑分支,错误的以为已经找到AD域并连接成功,事实上ldap_connect()可能只是完成了一些参数的初始化,并未真正连接。