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的设计。

  • 相关阅读:
    leetcode 86. Partition List
    leetcode 303. Range Sum Query
    leetcode 1310. XOR Queries of a Subarray
    leetcode 1309. Decrypt String from Alphabet to Integer Mapping
    leetcode 215. Kth Largest Element in an Array
    将numpy.ndarray写入excel
    leetcode 1021 Remove Outermost Parentheses
    leetcode 1306. Jump Game III
    leetcode 1305. All Elements in Two Binary Search Trees
    ICCV2019 oral:Wavelet Domain Style Transfer for an Effective Perception-distortion Tradeoff in Single Image Super-Resolution
  • 原文地址:https://www.cnblogs.com/rethink/p/1868775.html
Copyright © 2011-2022 走看看