PHP - LDAP身份验证和搜索

时间:2017-03-25 03:12:14

标签: php authentication active-directory ldap

我在这里使用在线LDAP测试服务器:http://www.forumsys.com/tutorials/integration-how-to/ldap/online-ldap-test-server/来测试一些基本的LDAP代码。

我需要对用户进行身份验证并检索一些用户信息。

如果我正确理解了有关测试服务器的信息,我应该能够与属于各个组的用户绑定。使用下面的代码“AS IS”,我可以绑定到未注释的$ dn,但如果我使用任何其他$ dn进行身份验证,则绑定将失败。

我不理解什么?

例如,特斯拉应属于'ou =科学家,dc = example,dc = com',但我无法在该DN上验证特斯拉,随后我无法搜索相关信息。

    $dn = 'dc=example,dc=com';
    // $dn = 'ou=mathematicians,dc=example,dc=com';
    // $dn = 'ou=scientists,dc=example,dc=com';

    $username   = 'tesla';
    $password   = 'password';
    $filter     = "(uid=" . $username . ")";

    $ldapDN     = 'uid=' . $username . ',' . $dn;

    $ldapCONN   = ldap_connect("ldap.forumsys.com") or die("Could not connect to LDAP server.");

    if ($ldapCONN)
    {
        ldap_set_option($ldapCONN, LDAP_OPT_PROTOCOL_VERSION, 3);

        $ldapBIND = @ldap_bind($ldapCONN, $ldapDN, $password);

        if ( $ldapBIND )
        {

            $result = ldap_search($ldapCONN, $dn, $filter) or die ("Error: ".ldap_error($ldapCONN));

            $data   = ldap_get_entries($ldapCONN, $result);

            echo '<pre>';
                print_r($data);
            echo '</pre>';

        } 
        else
        {
            echo "LDAP bind failed...";
        }
    }

1 个答案:

答案 0 :(得分:2)

使用LDAP时,重要的是可视化数据库的组织方式。

基本上,所有用户都在主文件夹中。使用此文件夹对您的用户进行身份验证,否则将无法正常工作。 在这种情况下,所有用户所在的主文件夹是dc=example,dc=com。但是,大多数LDAP服务器使用cn=users,dc=example,dc=com等主文件夹。

为什么他们一直在使用文件夹呢?好吧,那就是使用过滤器分类和搜索更容易。例如,如果您只想显示科学家的名字,可以将科学家组添加到搜索过滤器中,如$filter = "(ou=Scientists)"。两个组的过滤器如下所示:$filter = "(&(ou=Scientists)(ou=Mathematicians)"。现在,服务器将查看此文件夹/这些文件夹,并仅显示这些成员。

希望这有帮助,为了进一步了解服务器的组织方式,我建议安装Apache Directory Studio。可以从their site免费下载,对我帮助很大!