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