AD on Windows Server 2012 + Windows LDAP + PHP Bind


AD on Windows Server 2012 + Windows LDAP + PHP Bind

我已经在Windows Server 2012上设置了Active Directory和ADLDAP。 我正在尝试一个简单的ldap_bind但仍然有一个"无效凭据"错误吐回给我。

在我的 AD 用户和组屏幕中,我可以清楚地看到我创建的域以及 OU(组织单位(和其中的用户。ASDI 编辑清楚地告诉我该用户的 DN:

CN=Bob Smith,OU=Accounting,DC=mydomain,DC=net

此外,BaseDN 在 ASDI 编辑中清楚地告诉我,因为它高于 OU 组"会计"——

DC=mydomain,DC=net

现在进入我的脚本 - 它不会抛出 LDAP 连接错误,仅在绑定时抛出,并具有恒定的无效凭据:

$connectionLDAP = "LDAP://localhost:54126"; 
$basedn = 'DC=mydomain,DC=net';
$ldap = ldap_connect($connectionLDAP) or die("Could not connect to LDAP server.");
$username = $post['username'];
$password = $post['password'];
$usernameForBind = "CN=".$username.",OU=Accounting,".$basedn;
ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($ldap, LDAP_OPT_REFERRALS, 0);
$bind = ldap_bind($ldap, $usernameForBind, $password);

这引发了以下警告,当然我的脚本到此结束,因为没有找到与用户名和密码的正匹配:

Warning: ldap_bind(): Unable to bind to server: Invalid credentials in C:'....'login.php on line 41

下面的错误回声产生这个:

echo(ldap_error($ldap)."<br>");
echo(ldap_errno($ldap)."<br>");

Invalid credentials
49

我已经尝试了DN,用户名,电子邮件地址,mydomain''用户名的所有组合,而没有其余的DN信息,我能想到的一切......但对于我的生活来说,这并不需要,不幸的是,谷歌+堆栈搜索目前并没有帮助我克服这一点。

感谢您的任何帮助。

您正在使用Windows上的Active Directory,因此请将您的代码更改为以下它将起作用。因为AD需要@domain_name绑定函数中的用户名后缀。

$connectionLDAP = "ldap://localhost"; 
$basedn = '@mydomain.net';
$ldap = @ldap_connect($connectionLDAP, 54126) or die("Could not connect to LDAP server.");
$username = $post['username'];
$password = $post['password'];
$usernameForBind = $username.$basedn;
@ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3);
@ldap_set_option($ldap, LDAP_OPT_REFERRALS, 0);
$bind = @ldap_bind($ldap, $usernameForBind, $password);

我已经多次测试过这样的场景,它适用于 AD。

另外,请确保您的AD服务器在代码中使用的相同端口上运行,即。54126.