天天看點

使用PHP登入Ldap伺服器LDAP 的全稱是“輕量級目錄通路協定(Lightweight Directory Access Protocol)”,是一種簡單的目錄協定。所謂目錄,是一種專門的資料庫,可以用來服務于任何應用程式。公司的域帳号登入采用的是Ldap登入驗證,所有的系統均使用來自同一個 LDAP 目錄的使用者資訊進行身驗證。這樣,就不需要在每個系統中儲存不同的密碼,隻需要在 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擴充庫,相對來說更加的友善快捷。這裡介紹的是第二種方法。

(1)通過http://www.php.net/releases/ 下載下傳目前系統php版本對應的源碼包,解壓到伺服器某目錄下

(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連接配接