Php 使用LDAP时,XAMPP需要强(er)身份验证

Php 使用LDAP时,XAMPP需要强(er)身份验证,php,xampp,ldap,Php,Xampp,Ldap,我正在我的网站上做一些初始测试,以允许域用户使用ldap_绑定登录到它。我正在运行这个简单的测试,使用一个表单发送用户名和密码 $ldapconn = ldap_connect("ldap://DC01.DOMAIN.NET") or die ("Could Not Connecet to LDAP Server"); if ($ldapconn) { $ldapbind = ldap_bind($ldapconn, $user, $password

我正在我的网站上做一些初始测试,以允许域用户使用ldap_绑定登录到它。我正在运行这个简单的测试,使用一个表单发送用户名和密码

$ldapconn = ldap_connect("ldap://DC01.DOMAIN.NET") or die ("Could Not Connecet to LDAP Server");
if ($ldapconn) {
   $ldapbind = ldap_bind($ldapconn, $user, $password);
   if ($ldapbind) {
       echo "Bind Success";
   }
   else {
       echo "Bind Failure";
}
当我传递有效的用户名和密码时,会出现以下错误:
**警告**:ldap_bind();无法绑定到服务器:需要强(er)身份验证。。。绑定失败


我目前正在运行7.4.12。运行XAMPP的服务器具有该域的有效证书。我遗漏了什么?

好的,听起来您需要使用TLS进行连接

有两种方法可以将TLS用于LDAP连接:LDAPS和StartTLS。您在常规端口389上得到响应意味着StartTLS可能会受到支持

因此,首先要做的是设置协议版本。然后,您需要告诉它启动TLS握手

所以你上面的例子会变成这样:

$ldapconn = ldap_connect("ldap://DC01.DOMAIN.NET") or die ("Could Not Connecet to LDAP Server");

if ($ldapconn) {
    if (! ldap_set_option($ldapconn, LDAP_OPT_PROTOCOL_VERSION, 3)) {
        die("Cannot set protocol v3");
    }
    if (! ldap_start_tls($ldapconn)) {
        die("Cannot initiate TLS");
    }

    $ldapbind = ldap_bind($ldapconn, $user, $password);
    if ($ldapbind) {
        echo "Bind Success";
    }
    else {
        echo "Bind Failure";
    }
}
这假设运行PHP的服务器已经信任签署LDAP服务器证书的CA。如果没有,在调用
ldap\u start\u tls
之前,您还需要获取CA证书,并将其放入系统信任存储中,或者告诉php显式使用它:

ldap_set_option(LDAP_OPT_X_TLS_CACERTFILE, '/path/to/cacert.file');

好的,所以修复了代码,我得到了“绑定失败”。因此,对于LDAP,您通常需要指定一个完整的DN(例如,
cn=username,ou=users,o=example
)。执行“通过用户名登录”时的常见模式是进行匿名绑定,搜索具有匹配用户名的对象,然后尝试使用该对象的DN和给定的密码进行绑定。AD环境的管理员应该能够告诉您是否允许匿名绑定,或者如果不允许,他们可以告诉您用户DN应采用的形式,以便您可以从简单的用户名生成DN。