使用LDAP

时间:2016-08-20 18:10:10

标签: php authentication active-directory

我正在尝试使用IP.Board LDAP登录处理程序;但是,虽然服务器连接并且我执行的查询是正确的,但我无法使用LDAP帐户登录。它抛出了常见的“未知用户名”错误。该脚本成功连接,因为如果我使用了错误的凭据,它会在LDAP设置页面中引发身份验证错误;如果我在弄乱设置并尝试使用登录页面中的帐户登录时强制使用ldap_search(): Search: Bad search filterldap_search(): Search: Operations error,也会发生这种情况。所以我认为问题应该在其他地方......

要测试我正在使用的设置,我已使用以下代码成功连接:

<?php
set_time_limit(30);
error_reporting(E_ALL);
ini_set('error_reporting', E_ALL);
ini_set('display_errors',1);

// config
$ldapserver = 'server ip';
$ldapuser      = 'username';  
$ldappass     = 'password';
$ldaptree    = "OU=The,DC=path,DC=to,DC=users";

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

if($ldapconn) {
    // binding to ldap server
    $ldapbind = ldap_bind($ldapconn, $ldapuser, $ldappass) or die ("Error trying to bind: ".ldap_error($ldapconn));
    // verify binding
    if ($ldapbind) {
        echo "LDAP bind successful...<br /><br />";


        $result = ldap_search($ldapconn,$ldaptree, "(cn=*)") or die ("Error in search query: ".ldap_error($ldapconn));
        $data = ldap_get_entries($ldapconn, $result);

        // SHOW ALL DATA
        echo '<h1>Dump all data</h1><pre>';
        print_r($data);    
        echo '</pre>';


        // iterate over array and print data for each entry
        echo '<h1>Show me the users</h1>';
        for ($i=0; $i<$data["count"]; $i++) {
            //echo "dn is: ". $data[$i]["dn"] ."<br />";
            echo "User: ". $data[$i]["cn"][0] ."<br />";
            if(isset($data[$i]["mail"][0])) {
                echo "Email: ". $data[$i]["mail"][0] ."<br /><br />";
            } else {
                echo "Email: None<br /><br />";
            }
        }
        // print number of entries found
        echo "Number of entries found: " . ldap_count_entries($ldapconn, $result);
    } else {
        echo "LDAP bind failed...";
    }

}

// all done? clean up
ldap_close($ldapconn);
?>

它完全呈现数组,向我显示属于该路径的完整用户列表,这对IPB来说应该足以验证信息,不是吗?

由于连接实际上是成功的但它没有找到用户,因此它不会生成任何关于它的日志记录。

我已经检查了此线程中公开的LDAP用户名权限:https://serverfault.com/questions/167371/what-permissions-are-required-for-enumerating-users-groups-in-active-directory/167401因此用户具有管理权限,也可以读取这些元素。

这非常令人沮丧。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

我发现在我们的LDAP设置中,IPB所需的UID字段为CN。纠正这个小事后,我终于设法执行同步