![LDAP 无法执行经过身份验证的绑定 - Windows Server 2008 R2 使用 PHP/Apache](https://linux22.com/image/800818/LDAP%20%E6%97%A0%E6%B3%95%E6%89%A7%E8%A1%8C%E7%BB%8F%E8%BF%87%E8%BA%AB%E4%BB%BD%E9%AA%8C%E8%AF%81%E7%9A%84%E7%BB%91%E5%AE%9A%20-%20Windows%20Server%202008%20R2%20%E4%BD%BF%E7%94%A8%20PHP%2FApache.png)
我在对服务器执行身份验证绑定时遇到问题。问题似乎不是代码问题,但可能是服务器问题。
你知道吗;
- Apache/PHP 中启用了 LDAP
- 我正在连接[电子邮件保护]
- 域控制器正在运行 LDAP,防火墙中有条目(Windows Server 2008 R2)问题可能出在这里,这是作为 DC 设置的,默认情况下运行 LDAP。我没有对 LDAP 进行任何特殊配置
- 我可以执行匿名绑定,但不能执行经过身份验证的绑定
我可以使用此脚本进行匿名绑定;
$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 = '[email protected]'; // 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...";
}
}
我哪里做错了?
答案1
ldap_errno()
好的,经过大量调查后,我使用并打开了错误信息ldap_error()
,发现它带回了错误“需要强(更强)身份验证”,发现了两种可能的解决方案;
调整组策略设置
- 协商签名(网络安全:LDAP 客户端签名要求)
无签名要求(域控制器:LDAP 服务器签名要求)
结果:成功绑定,当我输入错误的用户名或密码时,它会按预期抛出“无效凭据”。
启用 LDAP over SSL (LDAPS)