【问题标题】:PHP - LDAP Authentication and SearchPHP - LDAP 身份验证和搜索
【发布时间】:2017-03-25 03:12:13
【问题描述】:

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

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

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

我不明白什么?

例如,tesla 应该属于 'ou=scientists,dc=example,dc=com' 但我无法在该 DN 上对 tesla 进行身份验证,因此我无法搜索相关信息。

    $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...";
        }
    }

【问题讨论】:

    标签: php authentication active-directory ldap


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 实际上,您的回答为我澄清了过滤器的使用。我现在明白了,我误解了它。我一回到电脑前就试试这个。一个问题。我可以创建一个包含科学家和数学家的过滤器吗?我一定会看看 Apache Directory Studio。谢谢!
    • 当然,没问题!我将其添加到上面的答案中。希望这对您有所帮助。此外,最近我开始在 Stack Overflow 文档上编写 LDAP 页面,请参阅 stackoverflow.com/documentation/ldap/5576/…。也许它会进一步帮助你,我还在那里写了一些过滤器的例子。
    • 看起来不错。很有帮助,谢谢。我在实际项目中的目标是进行身份验证,然后按组和用户名过滤。我知道我需要找到什么,所以我需要它尽可能高效。我没有意识到过滤器如此灵活。仅此一项就很有帮助:) 我接受了旅游答案。
    • 不错!祝你的项目好运!
    猜你喜欢
    • 1970-01-01
    • 2021-04-19
    • 1970-01-01
    • 1970-01-01
    • 2011-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多