我已经在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搜索目前还没有帮助我。
感谢您的帮助。
答案 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