' ldap_compare '对所有属性/值对返回false



我正在尝试通过LDAP(活动目录)验证用户。ldap_compare显示Warning: ldap_compare(): Compare: Operations error in /mehr/public/lab/lab.php on line 26警告并返回-1。这个警告对我来说很模糊。有什么问题吗?

<?php 
$ldap = ldap_connect("179.33.2.200");
ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3); // Recommended for AD
ldap_set_option($ldap, LDAP_OPT_REFERRALS, 0);
$bind = ldap_bind($ldap, 'admin', '123456');
$bdn = 'DC=active,DC=local';
$r = ldap_compare($ldap, $bdn, 'userpassword', '123456'); 
$r = ldap_compare($ldap, $bdn, 'ou', 'bar');  // or evern
<标题> Upate:

使用@Arnold提示,我调用ldap_compare如下:

ldap_compare($ldap, $dn, 'ou', mb_convert_encoding('bar','utf16'))

现在,我没有得到"操作错误"(使用utf-16le导致相同的错误),但现在它返回所有属性/值对的false

您不能在活动目录中以这种方式比较密码。

首先,密码不是以明文形式存储在数据库中——它们是散列的,此外它们是UTF-16le编码的。

如果您只需要验证用户是否是他们声称的那个人,只需将绑定为该用户来验证他们:

// ... preparation code
if (ldap_bind($ldap, $userSuppliedName, $userSuppliedPassword)) {
    // credentials are valid
} else {
    // credentials are invalid
}

此方法负责 Active Directory中可用的所有身份验证规则,包括但不限于登录时间、工作站限制、密码过期、无效登录尝试等。简单地比较密码并不能告诉您上述任何信息。

最新更新