在Windows和UNIX下利用PHP和LDAP進行身份驗證(轉)
在Windows和UNIX下利用PHP和LDAP進行身份驗證(轉)[@more@] 我現在的老闆曾要求我為企業內部網際網路的Web服務提供一種標準的身份驗證方法。我遇到的一個主要問題就是我們公司主要使用了兩種平臺:UNIX和Windows。所以,我的第一個想法並不很成功:它要求每個員工都使用UNIX或者Linux而放棄Windows。
我認為解決現在的UNIX/Windows問題的最好方法就是利用PHP的LDAP特性。由於LDAP伺服器,要求我使用現有的系統,主要指的是一個巨大的Microsoft Exchange Server系統。我非常高興使用Exchange,它很可靠,而且LDAP特性的使用和配置也極為簡單。不過,請你注意:這套方案就身份驗證角度來看並不是最安全的。如果有較高等級的安全需求,我強烈建議你採用LDAP和SSL。
從哪裡開始學習
為了讓你入門,我給出了一個PHP LDAP函式的清單並對函式的功能給以簡要說明。然後,我將演示如何建立到LDAP伺服器的連線並驗證使用者。為了程式碼簡單起見,我將演示PHP連線的功能以及如何繫結到LDAP伺服器。
一對絕配:PHP和LADP
下面是我在例子中將要使用的函式的清單。網上有相關資料。
ldap_connect—用來連線LDAP服務。
ldap_bind—用來繫結到特定的LDAP目錄。
ldap_error—從LDAP伺服器上獲得錯誤資訊。
ldap_search—用來開始搜尋。
ldap_get_entries—從搜尋結果中獲得多個結果。
ldap_close—關閉LDAP連線。
現在我在例子中演示如何使用第一個函式(程式碼清單A)並適當介紹該函式的功能。
// LDAP variables
$ldap[‘user’] = ‘uname’;
$ldap[‘pass’] = ‘password’;
$ldap[‘host’] = ‘ldap.example.com’;
$ldap[‘port’] = 389;
$ldap[‘dn’] = ‘cn’.$ldap[‘user’].’,ou=Department,o=Company Name’;
$ldap[‘base’] = ‘’;
// connecting to ldap
$ldap[‘conn’] = ldap_connect( $ldap[‘host’], $ldap[‘port’] )
or die( “Could not connect to {$ldap[‘host’]}” );
?>
將會返回一個到LDAP伺服器的連線(也稱為資源,即resource)。ldap_connect函式有兩個引數:主機(host)和埠。第一個引數:主機就是LDAP主機名稱,第二個引數是LDAP執行的埠。預設情況下,LDAP使用的埠號為389。如果你需要到LDAP伺服器的一個安全連線,你可以把引數host改為一個你可以訪問的LDAP伺服器的URL,如下所示:
$ldap[‘conn’] = ldap_connect( “ldaps://ldap.example.com” );
由於你指定了URL而不是伺服器名稱,在這種方法下,你就不需要使用埠引數了。需要牢記的一點就是確切名稱需要與加密套接字協議層證照(the SSL certificate)對應。
// LDAP variables
$ldap[‘user’] = ‘uname’;
$ldap[‘pass’] = ‘password’;
$ldap[‘host’] = ‘ldap.example.com’;
$ldap[‘port’] = 389;
$ldap[‘dn’] = ‘cn’.$ldap[‘user’].’,ou=Department,o=Company Name’;
$ldap[‘base’] = ‘’;
// connecting to ldap
$ldap[‘conn’] = ldap_connect( $ldap[‘host’], $ldap[‘port’] )
or die( “Could not connect to {$ldap[‘host’]}” );
// binding to ldap
$ldap[‘bind’] = ldap_bind( $ldap[‘conn’], $ldap[‘dn’], $ldap[‘pass’] );
?>
演示瞭如何用使用者名稱和口令來繫結到伺服器。我建立了一個合適的域名(domain name ,DN)並用使用者的口令來合法連線到LDAP。我們透過使用域名和口令就可以讓LDAP伺服器透過身份認證並允許繫結連線,這樣我們就成功的繫結上了。ldap_bind的返回值是一個布林型別。我們可以根據返回值判斷使用者的登入證照是否有效。當這個過程結束後,你就可以知道使用者身份是否得到了認證。
如果發生了錯誤會怎樣?呼叫ldap_error函式是判斷髮生了什麼錯誤的好方法。ldap_error函式返回了一個字串,其中包含了LDAP伺服器發生的最後錯誤的資訊。
在
// LDAP variables
$ldap[‘user’] = ‘uname’;
$ldap[‘pass’] = ‘password’;
$ldap[‘host’] = ‘ldap.example.com’;
$ldap[‘port’] = 389;
$ldap[‘dn’] = ‘cn’.$ldap[‘user’].’,ou=Department,o=Company Name’;
$ldap[‘base’] = ‘’;
// connecting to ldap
$ldap[‘conn’] = ldap_connect( $ldap[‘host’], $ldap[‘port’] )
or die( “Could not connect to server {$ldap[‘host’]} );
// binding to ldap
$ldap[‘bind’] = ldap_bind( $ldap[‘conn’], $ldap[‘dn’], $ldap[‘pass’] );
if( !$ldap[‘bind’] )
{
echo ldap_error( $ldap[‘conn’] );
exit;
}
?>
中,我向指令碼中新增了ldap_error函式,如果繫結到LDAP伺服器的使用者身份沒有得到確認,那麼程式碼將退出執行。該函式返回一個字串,該字串包含了傳送到LDAP伺服器的最後一條指令產生的錯誤資訊。如果你按給定使用者名稱和口令的繫結沒有成功登入,那麼錯誤資訊將包含這對無效的使用者名稱和口令。
在我們的最後一個例子中
我認為解決現在的UNIX/Windows問題的最好方法就是利用PHP的LDAP特性。由於LDAP伺服器,要求我使用現有的系統,主要指的是一個巨大的Microsoft Exchange Server系統。我非常高興使用Exchange,它很可靠,而且LDAP特性的使用和配置也極為簡單。不過,請你注意:這套方案就身份驗證角度來看並不是最安全的。如果有較高等級的安全需求,我強烈建議你採用LDAP和SSL。
從哪裡開始學習
為了讓你入門,我給出了一個PHP LDAP函式的清單並對函式的功能給以簡要說明。然後,我將演示如何建立到LDAP伺服器的連線並驗證使用者。為了程式碼簡單起見,我將演示PHP連線的功能以及如何繫結到LDAP伺服器。
一對絕配:PHP和LADP
下面是我在例子中將要使用的函式的清單。網上有相關資料。
ldap_connect—用來連線LDAP服務。
ldap_bind—用來繫結到特定的LDAP目錄。
ldap_error—從LDAP伺服器上獲得錯誤資訊。
ldap_search—用來開始搜尋。
ldap_get_entries—從搜尋結果中獲得多個結果。
ldap_close—關閉LDAP連線。
現在我在例子中演示如何使用第一個函式(程式碼清單A)並適當介紹該函式的功能。
// LDAP variables
$ldap[‘user’] = ‘uname’;
$ldap[‘pass’] = ‘password’;
$ldap[‘host’] = ‘ldap.example.com’;
$ldap[‘port’] = 389;
$ldap[‘dn’] = ‘cn’.$ldap[‘user’].’,ou=Department,o=Company Name’;
$ldap[‘base’] = ‘’;
// connecting to ldap
$ldap[‘conn’] = ldap_connect( $ldap[‘host’], $ldap[‘port’] )
or die( “Could not connect to {$ldap[‘host’]}” );
?>
將會返回一個到LDAP伺服器的連線(也稱為資源,即resource)。ldap_connect函式有兩個引數:主機(host)和埠。第一個引數:主機就是LDAP主機名稱,第二個引數是LDAP執行的埠。預設情況下,LDAP使用的埠號為389。如果你需要到LDAP伺服器的一個安全連線,你可以把引數host改為一個你可以訪問的LDAP伺服器的URL,如下所示:
$ldap[‘conn’] = ldap_connect( “ldaps://ldap.example.com” );
由於你指定了URL而不是伺服器名稱,在這種方法下,你就不需要使用埠引數了。需要牢記的一點就是確切名稱需要與加密套接字協議層證照(the SSL certificate)對應。
// LDAP variables
$ldap[‘user’] = ‘uname’;
$ldap[‘pass’] = ‘password’;
$ldap[‘host’] = ‘ldap.example.com’;
$ldap[‘port’] = 389;
$ldap[‘dn’] = ‘cn’.$ldap[‘user’].’,ou=Department,o=Company Name’;
$ldap[‘base’] = ‘’;
// connecting to ldap
$ldap[‘conn’] = ldap_connect( $ldap[‘host’], $ldap[‘port’] )
or die( “Could not connect to {$ldap[‘host’]}” );
// binding to ldap
$ldap[‘bind’] = ldap_bind( $ldap[‘conn’], $ldap[‘dn’], $ldap[‘pass’] );
?>
演示瞭如何用使用者名稱和口令來繫結到伺服器。我建立了一個合適的域名(domain name ,DN)並用使用者的口令來合法連線到LDAP。我們透過使用域名和口令就可以讓LDAP伺服器透過身份認證並允許繫結連線,這樣我們就成功的繫結上了。ldap_bind的返回值是一個布林型別。我們可以根據返回值判斷使用者的登入證照是否有效。當這個過程結束後,你就可以知道使用者身份是否得到了認證。
如果發生了錯誤會怎樣?呼叫ldap_error函式是判斷髮生了什麼錯誤的好方法。ldap_error函式返回了一個字串,其中包含了LDAP伺服器發生的最後錯誤的資訊。
在
// LDAP variables
$ldap[‘user’] = ‘uname’;
$ldap[‘pass’] = ‘password’;
$ldap[‘host’] = ‘ldap.example.com’;
$ldap[‘port’] = 389;
$ldap[‘dn’] = ‘cn’.$ldap[‘user’].’,ou=Department,o=Company Name’;
$ldap[‘base’] = ‘’;
// connecting to ldap
$ldap[‘conn’] = ldap_connect( $ldap[‘host’], $ldap[‘port’] )
or die( “Could not connect to server {$ldap[‘host’]} );
// binding to ldap
$ldap[‘bind’] = ldap_bind( $ldap[‘conn’], $ldap[‘dn’], $ldap[‘pass’] );
if( !$ldap[‘bind’] )
{
echo ldap_error( $ldap[‘conn’] );
exit;
}
?>
中,我向指令碼中新增了ldap_error函式,如果繫結到LDAP伺服器的使用者身份沒有得到確認,那麼程式碼將退出執行。該函式返回一個字串,該字串包含了傳送到LDAP伺服器的最後一條指令產生的錯誤資訊。如果你按給定使用者名稱和口令的繫結沒有成功登入,那麼錯誤資訊將包含這對無效的使用者名稱和口令。
在我們的最後一個例子中
QUOTE:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617542/viewspace-946652/,如需轉載,請註明出處,否則將追究法律責任。
下一篇:
RHCE認證考試分數計算(轉)
請登入後發表評論
登入
全部評論
|
相關文章
- 使用java完成ldap身份驗證JavaLDA
- 在Linux Shell程式中進行身份驗證(轉)Linux
- 在Linux Shell程式中進行身份驗證[修訂版] (轉)Linux
- GitHub 現在支援安全金鑰和生物識別選項進行身份驗證Github
- PHP 對資料進行驗證和過濾PHP
- PHP校驗15位和18位身份證號PHP
- win10 的windows身份驗證怎麼開啟_win10怎麼進行身份驗證Win10Windows
- PHP 驗證身份證號碼PHP
- PHP 身份證精確匹配驗證PHP
- 作業系統身份驗證和口令檔案身份驗證總結作業系統
- 使用 OAuth 2.0 進行 Kafka 身份驗證 - strimziOAuthKafka
- Part 3: OAuth2進行身份驗證OAuth
- WebService通過SOAP頭進行身份驗證Web
- windows下利用ffmpeg進行視訊格式轉換Windows
- asp.core 同時相容JWT身份驗證和Cookies 身份驗證兩種模式JWTCookie模式
- java 實現從15位~18位的身份證號碼轉換,校驗中國大陸公民身份證、香港居民身份證、澳門身份證和臺灣身份證。Java
- 直播app原始碼,進行身份驗證時,檢測身份證位數夠不夠APP原始碼
- 利用JAAS對使用者進行驗證和授權遇到的問題
- 【Dflying Chen】在ASP.NET Atlas中結合Membership進行身份驗證ASP.NET
- 零知識證明在隱私保護和身份驗證中的應用
- php與js方式驗證手機號碼和郵件地址的合法性,js驗證身份證號碼PHPJS
- Apache+php在windows下的安裝和配置ApachePHPWindows
- 在Windows低許可權下利用服務進行提權Windows
- NTLM(NT LAN Manager)是一種Windows作業系統中使用的身份驗證協議,用於驗證使用者的身份以及在網路上進行安全通訊。它通常用於在區域網環境中對使用者進行身份驗證,以便他們可以訪問共享資源和其他網路服務。Windows作業系統協議
- FreeBSD 整合Unix和Windows的方式(轉)Windows
- javascript 驗證身份證JavaScript
- 教你在命令列下執行PHP和MySQL命令列PHPMySql
- 1.6.5.1. 準備使用密碼檔案進行身份驗證密碼
- 使用JAVA進行ad域身份驗證常用屬性詳解Java
- 在PHP中以root身份執行外部命令(轉)PHP
- 使用 gorilla/mux 進行 HTTP 請求路由和驗證GoUXHTTP路由
- Welcome to YARP - 5.身份驗證和授權
- Django 使用LDAP驗證登入DjangoLDA
- WEB身份驗證Web
- gRPC(七)進階:自定義身份驗證RPC
- 使用Ccscan進行資料字符集轉換驗證(下)
- 身份證驗證工具類
- Apache基於MySQL的身份驗證(轉)ApacheMySql