Windows Server 2012上的AD + Windows LDAP + PHP绑定

时间:2016-02-10 22:50:24

标签: php ldap

我已经在Windows Server 2012上设置了Active Directory和ADLDAP。我尝试使用简单的ldap_bind,但继续使用"无效的凭据"错误吐回来。

在我的AD用户和群组屏幕中,我清楚地看到我制作的域以及OU(组织单位)和其中的用户。 ASDI Edit清楚地告诉我该用户的DN:

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

此外,在ASDI编辑中明确告诉我BaseDN,因为它高于OU组" accounting" -

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信息,我能想到的一切....但是对于我的生活,它不会采取,不幸的是,google + Stack搜索目前还没有帮助我。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您正在Windows上使用Active目录,因此请将您的代码更改为以下它可以正常工作。因为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