我知道我的错误将会变得非常简单,但我试图找到问题并且我没有看到它,也许你可以帮助我....
我正在尝试使用php创建一个函数,因此我可以连接到LDAP并找到所需的信息。
我的php代码如下:
$ldapconfig['host'] = "127.0.0.1";
$ldapconfig['port'] = NULL;
$ldapconfig['basedn'] = "dc=example,dc=com";
$ldapconfig['binddn'] = "user";
$ldapconfig['bindpw'] = "password";
function ldap_authenticate($user, $pass) {
global $ldapconfig;
ldap_set_option(NULL, LDAP_OPT_DEBUG_LEVEL, 7);
if ($user != "" && $pass != "") {
$ds=ldap_connect($ldapconfig['host'],$ldapconfig['port']);
if(!ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3)) {
return NULL;
}
ldap_set_option($ds, LDAP_OPT_REFERRALS, 0);
ldap_bind( $ds, $ldapconfig['binddn'], $ldapconfig['bindpw']);
$r = ldap_search( $ds, $ldapconfig['basedn'], 'sAMAccountName=' . $user);
if ($r) {
$result = ldap_get_entries( $ds, $r);
if ($result[0]) {
if (ldap_bind( $ds, $result[0]['dn'], $pass) ) {
return $result[0]['mail'][0];
}
}
}
}
return NULL;
当我尝试运行代码时,它给了我以下错误: ldap_bind xxxx行上的DN语法无效 该行如下:
ldap_bind( $ds, $ldapconfig['binddn'], $ldapconfig['bindpw']);
答案 0 :(得分:9)
如错误中所述,您的绑定DN格式错误。 DN表示对象的完整路径 - 所以在你的情况下应该是这样的(看起来你在AD?)
“cn = username,ou = domain users,dc = example,dc = com”
根据您的LDAP风格(Active Directory,OpenLDAP等),您可能能够使用uid(所以只是'用户名')进行绑定,但最好假设您始终需要完整的DN。
您可以使用像Apache Directory Studio这样的LDAP工具来帮助构建查询并找出对象的DN。或者也有ldp.exe(如果是AD),但目录工作室更容易使用。
答案 1 :(得分:1)
在DC上,执行: dsquery user -samid jim
将显示与sAMAccountName匹配的用户的DN: “CN = Jim Willeke,CN = Users,DC = mad,DC = willeke,DC = com”
http://ldapwiki.willeke.com/wiki/LDAP%20and%20Active%20Directory