zoukankan      html  css  js  c++  java
  • php连接LDAP服务器(Active Directory)及信息的检索

    LDAP是个Protocol,目前常用的实现有如下三种方案:
    1 NDS(Novell Directory Services)
    2 Microsoft Active Directory
    3 OpenLDAP

    要实现LDAP,第一步是设计DIT(即Directory Information Tree)。

    以下连接代码在Microsoft Active Directory(即AD)下验证通过。

    最简单的bind方式:

    <?php

    // LDAP variables
    $ldaphost = "192.168.8.5";  // your ldap servers
    $ldapport = 389;                 // your ldap server's port number

    // Connecting to LDAP

    $ldapconn = ldap_connect($ldaphost, $ldapport) or die("Could not connect to $ldaphost");


    $ldaprdn  = "testuser";     // ldap rdn or dn
    $ldappass = 'testpwd';  // associated password

    if ($ldapconn) {

        
    // binding to ldap server
        $ldapbind = ldap_bind($ldapconn, $ldaprdn, $ldappass);

     
    //var_dump($ldapbind);

        // verify binding

        if ($ldapbind) {
            
    echo "LDAP bind successful...";
        } 
    else {
            
    echo "LDAP bind failed...";
        }

    }


    是否能采用这种方式,取决于Directory Information Tree的结构。该方式存在明显缺点,要么bind成功,要么失败。即无法分别是用户名错误,还是密码错误。

    search方式:

       $ldap_host = "192.168.8.5";
        $ldap_port = "389";
        $base_dn = "OU=zzz,DC=test,DC=com,DC=cn";
        $filter = "(cn=*)";
        $ldap_user ="cn=admin,OU=zzz,DC=test,DC=com,DC=cn";
        $ldap_pass = "123456";
        $connect = ldap_connect( $ldap_host, $ldap_port);
        ldap_set_option($connect, LDAP_OPT_PROTOCOL_VERSION, 3);

        $bind = ldap_bind($connect, $ldap_user, $ldap_pass);
        $read = ldap_search($connect, $base_dn, $filter);
        
        $info = ldap_get_entries($connect, $read); 
        echo $info["count"]." entrees retournees<BR><BR>"; 
        for($ligne = 0; $ligne<$info["count"]; $ligne++)
        {
            for($colonne = 0; $colonne<$info[$ligne]["count"]; $colonne++)
            {
                $data = $info[$ligne][$colonne];
                echo $data.":".$info[$ligne][$data][0]."<BR>";
            }
            echo "<BR>";
        }
    ldap_close($connect);

     其中:

        $ldap_user ="cn=admin,OU=zzz,DC=test,DC=com,DC=cn";

        $ldap_pass = "123456";

    这两个语句定义了一个专用的LDAP账户用于登陆到LDAP服务器,该帐号必须具有检索权限。

    在登录到LDAP服务器之后,就可以对LDAP中的信息进行检索(ldap_search)了,此时就可以判断某个id是否存在,密码是否正确等等。


    在具体开发中采用哪种方式,取决于Directory Information Tree的设计。

  • 相关阅读:
    MySQL中去重字段完全相同的数据
    SVN自动更新-win平台
    EF出错:Unable to convert MySQL date/time value to System.DateTime
    微信不支持Object.assign
    记录一下dotnetcore.1.0.0-VS2015Tools.preview2安装不上的问题
    Ajax表单异步上传(包括文件域)
    .NET web开发之WebApi初试水
    遍历数组一次求得数组的平均数、标准差、方差
    记STM32F030多通道ADC DMA读取乱序问题
    RT-Thread入门和模拟器的配置生成
  • 原文地址:https://www.cnblogs.com/rethink/p/1868775.html
Copyright © 2011-2022 走看看