Windows Server AD 說穿了就是一個 LADP 伺服器,可讓您將資訊儲存在目錄服務中,在資料庫中進行查詢,並可以使用他來作為身份的認證授權。
使用PHP撰寫程式難免會遇到需要作身份認證的問題,除了自行撰寫這部份程式的選擇外,PHP 的函式庫中亦提供了標準的 LDAP 函式,如果公司組織中已經有架設 Windows 2K/2003 網域的環境 ,將身份認證的工作交由 Windows AD 亦是一個不錯的選擇。
案例環境說明:
1.公司組織內有一個Windows 網域,名稱為: domain.com。
2.domain.com 的網域有兩部網域主控站(DC)分別為:dc.domain.com、dc2.domain.com。
3.PHP版本:5.1.4
PHP程式碼範例:
以下的程式範例為精簡版,帳號和密碼不可為空的
<?php
$domain = 'domain.com'; //設定網域名稱
$user = 'user'; //設定欲認證的帳號名稱
$password = 'password'; //設定欲認證的帳號密碼
$dn = "dc=domain,dc=com";
// 使用 ldap bind
$ldaprdn = $user . '@' . $domain; // ldap rdn or dn
$ldappass = $password; // 設定密碼
// 連接至網域控制站
$ldapconn = ldap_connect($domain) or die("無法連接至 $domain");
// 如果要特別指定某一部網域主控站(DC)來作認證則上面改寫為
// $ldapconn = ldap_connect('dc.domain.com) or die("無法連接至 dc.domain.com");
// 或
// $ldapconn = ldap_connect('dc2.domain.com)or die("無法連接至 dc2.domain.com");
//以下兩行務必加上,否則 Windows AD 無法在不指定 OU 下,作搜尋的動作
ldap_set_option($ldapconn, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($ldapconn, LDAP_OPT_REFERRALS, 0);
if ($ldapconn) { // binding to ldap server
$ldapbind = @ldap_bind($ldapconn, $ldaprdn, $ldappass);
// verify binding
if ($ldapbind) {
$filter = "(sAMAccountName=$user)";
$result = @ldap_search($ldapconn, $dn, $filter);
if($result==false) echo "認證失敗";
else {
echo "認證成功...";
//取出帳號的所有資訊
$entries = ldap_get_entries($ldapconn, $result);
}
} else {
echo "認證失敗...";
}
}
?>