我遇到了对服务器执行经过身份验证的绑定的问题。问题似乎不在代码中,但可能是服务器问题。
就这样你知道;
我可以使用此脚本匿名绑定;
$ldapconn = ldap_connect("machinename.domain.com")
or die("Could not connect to LDAP server.");
if ($ldapconn) {
// binding anonymously
$ldapbind = ldap_bind($ldapconn);
if ($ldapbind) {
echo "LDAP bind anonymous successful...";
} else {
echo "LDAP bind anonymous failed...";
}
}
但是,当我尝试使用此脚本执行经过身份验证的绑定时,它会失败。
// Authenticated Bind
$ldaprdn = 'username@domain.com'; // ldap rdn or dn
$ldappass = 'password'; // associated password
// connect to ldap server
$ldapconn = ldap_connect("machinename.domain.com")
or die("Could not connect to LDAP server.");
if ($ldapconn) {
// binding to ldap server
$ldapbind = ldap_bind($ldapconn, $ldaprdn, $ldappass);
// verify binding
if ($ldapbind) {
echo "LDAP bind successful...";
} else {
echo "LDAP bind failed...";
}
}
我哪里错了?
答案 0 :(得分:0)
您的LDAP可能需要DN
登录。对于retrive,DN首先搜索用户uid
。
$search = ldap_search($ldapconn, $baseDn, $filter, $attributes);
if ($search) {
$entries = ldap_get_entries($ldapconn, 'uid=' . $ldaprdn);// Here $ldaprdn is the email
if (is_array($entries)) {
$ldaprdn = $entries[0]['dn']; // Get the DN of the user
}
}
$ldapbind = ldap_bind($ldapconn, $ldaprdn, $ldappass);
// ....
注意:您应该转义$ldaprdn
以避免LDAP注入攻击。
答案 1 :(得分:0)
好的,经过大量调查后,我使用ldap_errno()
和ldap_error()
打开了错误信息,发现它带来了错误'强(呃)身份验证所需'已经发现了两种可能的解决方案;
调整组策略设置
无签名要求(域控制器:LDAP服务器签名要求)
结果:管理成功绑定,当我输错用户名或密码时,它会抛出“无效凭据”。正如所料。
启用LDAP over SSL(LDAPS)