1. 程式人生 > >使用PHP登入Ldap伺服器

使用PHP登入Ldap伺服器

LDAP 的全稱是“輕量級目錄訪問協議(Lightweight Directory Access Protocol)”,是一種簡單的目錄協議。所謂目錄,是一種專門的資料庫,可以用來服務於任何應用程式。公司的域帳號登入採用的是Ldap登入驗證,所有的系統均使用來自同一個 LDAP 目錄的使用者資訊進行身驗證。這樣,就不需要在每個系統中儲存不同的密碼,只需要在 LDAP 目錄中儲存一個密碼即可。本文主要介紹一下PHP環境下如何通過後臺登入公司Ldap伺服器驗證使用者名稱密碼。

首先是系統的環境配置,在Linux伺服器環境下,php不預設掛載ldap擴充套件庫,因此需要新增ldap擴充套件庫,新增ldap擴充套件庫的方法有兩種:一是重新編譯php,這種方法比較繁瑣,另外一種方法是通過phpize和configure的方式載入ldap的so檔案來使php支援ldap擴充套件庫,相對來說更加的方便快捷。這裡介紹的是第二種方法。

(2)進入該目錄 cd/XXX/XXX/php-5.X.XX/ext/ldap

(3)在當前目錄執行phpize/usr/local/php/bin/phpize 生成configure檔案

(4)執行configure檔案並新增生成ldap擴充套件的引數

./configure--with-php-config --with-ldap

(5)執行make   make install

執行結束後會生成ldap.so檔案

(6)找到php.ini檔案,找到extension_dir,將ldap.so檔案複製進該目錄

(7)php.ini檔案中新增extension=ldap.so

(8)重啟apache,這樣就為php添加了ldap擴充套件庫

         下面介紹一下在php下使用ldap到伺服器驗證使用者名稱密碼。


         $ldapConnect=ldap_connect(LDAP_SERVER_IP , LDAP_SERVER_PORT );
 	 //建立到ldap伺服器的連線LDAP_SERVER_IP是ldap伺服器ip,LDAP_SERVER_PORT是ldap伺服器埠(預設389)
         $bind= @ldap_bind($ldapConnect , $user . ‘@corp.qihoo.net’,$pass);
	 //驗證帳號密碼,ldap_bind第一個為繫結的連線,第二個為使用者名稱(注意是否有後綴),第三個為密碼。
         if($bind )
         {//驗證成功
                   $SEARCH_DN= 'ou=XXX,ou=XXX,dc=XXXX,dc=XXXX,dc=XXXX';
                   //搜尋基本條件值(類似於資料庫的庫和表)
                   $SEARCH_FIELDS= array('mail','displayName', 'cn');
                   //需要的搜尋結果
                   $result= @ldap_search($ldapConnect,$SEARCH_DN,"cn=" . $user,$SEARCH_FIELDS);
                   //第三個引數是限定搜尋結果為使用者名稱為$user(類似where後的搜尋條件)          
                   $retData = @ldap_get_entries($ldapConnect, $result);
                   foreach($retDataas $k => $v)
                   {//篩選整理資料,返回
                            return array(
                                     'userName'=> $v['cn'][0],
                                     'nickName'=> $v['displayname'][0]
                                     'mail'=> $v['mail'][0]
                            ); 
                  }  
         }
         else
         {//驗證失敗
	 }
         ldap_close($ldapConnect); 
	//關閉ldap連線