Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP LDAP绑定成功,有时密码不正确_Php_Authentication_Active Directory_Ldap - Fatal编程技术网

PHP LDAP绑定成功,有时密码不正确

PHP LDAP绑定成功,有时密码不正确,php,authentication,active-directory,ldap,Php,Authentication,Active Directory,Ldap,我目前正在集成LDAP身份验证。我可以连接到LDAP AD服务器,并以匿名方式查询数据,这很好。我现在正在尝试验证用户,当我输入用户名和随机密码时,它成功失败,当我输入真实密码时,它成功通过,但我能够输入大部分正确的密码,它仍然通过 e、 g: Username: user1 Password: RandomPassword1 (works) Username: user1 Password: Random (fails) Username: user1 Password: RandomPa

我目前正在集成LDAP身份验证。我可以连接到LDAP AD服务器,并以匿名方式查询数据,这很好。我现在正在尝试验证用户,当我输入用户名和随机密码时,它成功失败,当我输入真实密码时,它成功通过,但我能够输入大部分正确的密码,它仍然通过

e、 g:

Username: user1
Password: RandomPassword1
(works)

Username: user1
Password: Random
(fails)

Username: user1
Password: RandomPasswo
(works???)
所以现在我很好奇,如果Active Directory可能没有检查整个密码,可能它不能,或者它使用的哈希算法为RandomPassword1生成与RandomPasswo相同的哈希代码

我想我的问题是^,但也有办法确保它正确认证吗? 我没有用其他密码测试过这个,因为我没有访问其他帐户的权限来测试它,但是当密码是RandomPassword1时它肯定会工作(这恰好是我的密码,是的-我现在已经更改了它)

编辑:我的LDAP绑定代码:

function validateLoginDetails($username, $password) {
    $ldap_connection = ldap_connect("server", 389);
    if($ldap_connection === FALSE) {
        echo "Unable to connect.";
    } else {
        ldap_set_option($ldap_connection, LDAP_OPT_PROTOCOL_VERSION, 3) or die("Could not set version.");
        ldap_set_option($ldap_connection, LDAP_OPT_REFERRALS, 0);
    }
    $r = @ldap_bind(@$ldap_connection, "uid=".$username.",ou=People,o=Foo", $password);
    if(!$r) {
        return false;
    } else {
        return true;
    }
}
(请注意,使用相同的连接,我可以列出所有用户及其信息,它确实拒绝随机混合的密码,但正如我所说,它接受半完整的密码。这可能是AD或LDAP中的一个选项?)


(我也意识到,即使我更改了密码,我的新密码也不起作用,但旧密码RandomPassword1仍然起作用,但我想这可能是因为AD需要一段时间才能更新或做些什么?我不确定。)

我知道已经很久了,但我只是遇到了同样的“问题”,回答了你的问题,并找出原因(至少在我的情况下)。所以我想我会为那些感兴趣的人描述我是如何解决它的(尽管它可能不再是你特别感兴趣的)

在我的例子中,我发现这是因为我试图用“相似”密码(正确的密码减去或加上几个字符)验证的用户使用Unix Crypt方法对密码进行了加密(它在一台仅用于开发目的的机器中,所以没什么大不了的)

它可能只考虑了一个固定的短密码长度来生成散列,因此密码的最后几个字符并不重要


然后,我使用一种更强大的加密方法(如SHA-512 Crypt)设置用户密码,它只识别准确的密码,正如预期的那样。

您能给我们一个如何进行身份验证的代码示例吗?这不应该发生,因此我很好奇你是如何实现登录的,看看那里发生了什么……我现在已经添加了这个函数。也许是因为我压制了警告?正常情况下,新密码应该立即生效。您的广告中似乎还有其他内容无法正常工作抱歉,应该指定更好的-我更改了密码,并登录到Windows。这很好,只是LDAP绑定仍然可以使用旧密码/半密码工作。我上面的身份验证功能正常吗?代码似乎正常,尽管我的做法不同。我将删除ldap_绑定上的错误抑制,以查看是否存在来自服务器的任何消息。但是由于AD和您绑定到的服务器之间缺少同步,因此似乎发生了一些不同的事情。