Active Directory (AD)是企業經常用來做電腦登入認證的系統服務,透過 AD 伺服器 IT管理員能夠用來儲存 使用者(User)、使用者群組(Group)和電腦(Computer) …等的相關資訊以進行認證與網域存取管理。
PHP 預設是沒有開啟 AD 伺服器 支援,
打開 PHP.ini 設定,找到 "ldap",將 ;extension=ldap 的 ; 拿掉後存檔,
再重開一下Apache
再打開 phpinfo() 檢查看看
看到 LDAP Support enabled,就是可以支援 LDAP了。
LDAP 是 Lightweight Directory Access Protocol (輕型目錄存取協定)的簡稱。
LDAP 是一種開放的標準協議,它可以透過 Internet 協定(TCP/IP)存取和維護目錄資訊服務。
<?php
$domain = 'abc.com'; // 設定網域名稱(請替代成您的 LDAP Server名稱)
$dn="dc=abc,dc=com"; // 根 DN (請替代成您的 LDAP Server的 根DN)
// LDAP 伺服器設定
$ldapServer = 'ldap://ldap02.abc.com'; // LDAP Server位置
$user = 'myusername';
$password = 'mypassword';
// 連接到 LDAP 伺服器(僅測試伺服器是否存在)
$ldapconn = ldap_connect($ldapServer) or die('無法連接至 $domain');
// 以下兩行務必加上,否則 Windows AD 無法在不指定 OU 下,作搜尋的動作
ldap_set_option($ldapconn, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($ldapconn, LDAP_OPT_REFERRALS, 0);
if($ldapconn) { // 如果 LDAP Server存在
// binding to ldap server
$ldapbind = @ldap_bind($ldapconn, "$user@$domain", $password);
if($ldapbind){
echo "認證成功...";
// 以下用來抓回使用者的所有屬性
$filter = "(sAMAccountName=$user)"; // 用帳戶名來過濾
$result = @ldap_search($ldapconn, $dn, $filter); // 進行搜尋
if($result==false) {
echo "找不到使用者:$";
} else {
$data = ldap_get_entries( $ldapconn, $result );
echo $data ["count"] . " entries returned <br>";
// 列印出所有使用者資訊
for($i = 0; $i <= $data ["count"] - 1; $i ++) {
for($j = 0; $j <= $data [$i] ["count"] - 1; $j ++) {
echo "[$i:$j]=".$data [$i] [$j] . ": " . $data [$i] [$data [$i] [$j]] [0] . "\n<br>";
}
}
}
} else {
echo "認證失敗...";
}
}
?>
這樣就可以得到使用者在LDAP Server上的資訊。