PHP 連接 Microsoft AD (Active Directory) Server 伺服器資料庫,LDAP 驗證帳號密碼,以及取得 AD 資料庫的資料顯示於網頁上!
php 連接 Microsoft AD (Active Directory) 驗證
假設 Win Server 的 AD 資訊如下:
(紅色字部份)
改成您的資料,即可進行驗證是否連線成功。<?php //連到AD Server的帳號密碼 $account = "TEST-1\\vvv"; $password = "1234"; $server = '192.168.1.5'; //連線到AD server $conn=ldap_connect($server) or die("Could not connect to LDAP server"); //以下兩行務必加上,否則AD無法在不指定OU下,作搜尋的動作 @ldap_set_option($conn, LDAP_OPT_PROTOCOL_VERSION, 3); @ldap_set_option($conn, LDAP_OPT_REFERRALS, 0); //連線bind帳號密碼 if(ldap_bind($conn,$account,$password)){ echo '驗證成功'; } else{ echo '驗證失敗'; } ?>
範例結果:若是連線成功會顯示【驗證成功】,失敗則顯示【驗證失敗】。
相關語法簡述說明:
User 登入畫面,連接 AD 進行帳號密碼驗證,以及撈取 AD 資料
(紅、綠色字部份)
改成您的資料,即可使用及撈取資料囉!^ ^<?php session_start(); //帳密不能空白 if(isset($_POST['account'])){ if($_POST['account']=='' || $_POST['password']==''){ echo '<script>history.go(-1); </script>'; } if($_POST['account']!=''){ //連到 AD Server 的帳密 $account = 'TEST-1\\'.$_POST['account']; $password = $_POST['password']; $server = '192.168.1.5'; //連線到 AD server $conn=ldap_connect($server) or die("Could not connect to LDAP server"); //以下兩行務必加上,否則AD無法在不指定OU下,作搜尋的動作 ldap_set_option($conn, LDAP_OPT_PROTOCOL_VERSION, 3); ldap_set_option($conn, LDAP_OPT_REFERRALS, 0); //連線bind帳號密,加@是強制不顯示錯誤訊息 if(@ldap_bind($conn,$account,$password)){ //驗證成功,記錄帳號 $_SESSION['account'] = $_POST['account']; //此行可記錄帳號並把英文都轉大寫 $_SESSION['account'] = strtoupper($_POST['account']); } else{ //驗證失敗,回到上頁 echo '<script>alert("帳號或密碼錯誤");history.go(-1); </script>'; } } $attr_array = array(); //設定AD搜尋範圍 $dn="ou=高興,ou=Kk1,dc=kK1,dc=com,dc=tw"; //查詢的路徑,可利用MS的AD小工具AdExplorer查 $filter = "sAMAccountName=".$_POST['account']; //過濾物件(用 user 帳號來過濾) $result = ldap_search($conn,$dn,$filter); //查詢LDAP資訊 //計算找到幾筆資料 $count=ldap_count_entries($conn,$result); $sqlArray = array(); //取得 ldap_search搜尋結果第一筆ID資料 $entry = ldap_first_entry($conn, $result); if ($entry) { $attr = array("cn","mail","department"); //筆者撈三個資料為例 do { foreach ($attr as $attribute) //欄位逐一迴圈搜尋 { $val=ldap_get_values($conn, $entry, $attribute); //此行可即時顯示資料 echo "$attribute: $val[0]"; //全部欄位逐一記錄 $_SESSION[$attribute] = $val[0]; //此行可記錄單一條件欄位 if($attribute=='cn'){$_SESSION['cn'] = $val[0]; } } } while ($entry = ldap_next_entry($conn, $entry)); } //關閉ldap連線 ldap_close($conn); } //此行可清除 session session_destroy(); ?> <html> <head> </head> <body> <div> <form action="" method="post"> <p>請輸入帳號:<input type="text" name="account" autofocus /></p> <p>請輸入密碼:<input type="password" name="password" /></p> <p><input type="submit" /></p> </form> </div> <div> <?php //測試顯示 echo '姓名:'.$_SESSION['cn'].'<br>'; echo 'E-mail:'.$_SESSION['mail'].'<br>'; echo '部門:'.$_SESSION['department'].'<br>'; ?> </div> </body> </html>
範例結果:因沒實際 AD 伺服器可連接,所以怎麼輸入都是無作用唄!>"<
Microsoft Active Directory Explorer (AdExplorer) 簡易操作說明:
微軟網站下載 (v1.44): https://docs.microsoft.com/en-us/sysinternals/downloads/adexplorer