php Ldap 连接问题

php Ldap connection issues

请看下面的内容。我附上了 DN 设置和用户帐户的详细信息。我能够使用正确的详细信息通过 LDP.exe 验证帐户。

我收到 运行 这个脚本

时的错误
Warning: ldap_bind(): Unable to bind to server: Invalid credentials in /var/www/html/portal/ldap.php on line 8

下面是我正在尝试运行的 php 脚本。

<?php

$ldapconn = ldap_connect("server_url") or die("Could not connect to LDAP server.");

if ($ldapconn) {

    // binding anonymously
    $ldapbind = ldap_bind($ldapconn,'uid=Lyall,cn=Domain Admins,cn=Users,dc=svo,dc=local','Password');

    if ($ldapbind) {
        echo "LDAP bind anonymous successful...";
    } else {
        echo "LDAP bind anonymous failed...";
    }

}

?>

这是 DN 设置的屏幕截图

这是我正在测试的用户的屏幕截图

我已经使用 LDP.exe 并且能够验证详细信息。

res = ldap_bind_s(ld, NULL, &NtAuthIdentity, NEGOTIATE (1158)); // v.3
    {NtAuthIdentity: User='lyall'; Pwd=<unavailable>; domain = 'cn=Domain Admins,cn=Users,dc=svo,dc=local'}
Authenticated as: 'SVO\Lyall'.

你确定 Lyall 的 DN 是 uid=Lyall,cn=Domain Admins,cn=Users,dc=svo,dc=local 吗?对我来说,Lyall 似乎只是 cn=Domain Admins,cn=Users,dc=svo,dc=local 组的成员。这并不一定意味着 Lyells DN 是 uid=Lyall,cn=Domain Admins,cn=Users,dc=svo,dc=local。也可以是 uid=Lyall,cn=Users,dc=svo,dc=local 或其他。也许这可以帮助您解决问题。

Active Directory 中没有 uid 这样的属性。您帐户的专有名称很可能以 CN= 开头。如果您有权访问 Powershell 的 Active Directory 模块(通常安装在域控制器或指定管理域的计算机上),您可以通过 运行 以下内容检查您的完整专有名称:

Get-ADUser YOUR_LOGINID_HERE -Properties DistinguishedName

(希望我没记错,好久没用了PS)

无论如何,DN 并不是您可以用于 authenticate/bind Active Directory 的唯一属性 - 您可以使用许多其他更容易记住的选项:

  • samAccountName: SVO\Lyall
  • userPrincipalName: Lyall@svo.local(有时它与电子邮件地址相同,取决​​于您如何命名您的用户帐户)
  • DisplayName

有关可用属性的详细说明,请参阅 MSDN 上的 Simple Authentication

警告 - 自我宣传如下:
我写了一些库,可以更轻松地使用 ldap,所以如果您有兴趣,请看一看 Ldap-Core