PHP教學-設定 PHP 網站與 AD-SERVER 連線進行帳號密碼認證

因為工作上接到任務需維護客戶端伺服器與 AD-SERVER 主機進行連線認證,於是就進行本機的 PHP 與 AD SERVER 連線測試。
實驗環境

AD SERVER 環境
WINDOWS SERVER 2012 R2
AD SERVER 建置請自行上網查詢

WEB SERVER本機環境
WINDOWS7 PRO (因位是測試,正式環境為CentOS 本篇僅說明 PHP 程式部分)
XAMPP

1.XAMPP 設定
遇到 No LDAP PHP Extension is loaded for PHP
複製 \xampp\php 資料夾內的 libsasl.dll 檔案 ,貼到 \xampp\apache\bin 資料夾內
編輯 \xampp\php 內的 php.ini 檔,開啟 extension=php_ldap.dll
重啟 apache

2.PHP 程式說明
當 AD SERVER 以建立好使用者帳號及相關資訊時,可以先利用以下程式進行連線測試
<?php
// 使用 ldap bind$ldaprdn  'uname';     // AD 帳號$ldappass 'password';  // AD 密碼

// 連線 ap server 主機資訊
$ldapconn ldap_connect("ldap.example.com")
    or die(
"Could not connect to LDAP server.");

if (
$ldapconn) {

    
// 綁定 AD server
    
$ldapbind ldap_bind($ldapconn$ldaprdn$ldappass);

    
// 進行認證
    
if ($ldapbind) {
        echo 
"LDAP bind successful...";//假如成功就回傳 successful
    } else {
        echo 
"LDAP bind failed...";//失敗的話則回傳錯誤訊息
    }

}
?>
詳細說明請參考 PHP 官網 LDAP 函數

PHP程式碼範例:
以下的程式範例為精簡版,帳號和密碼不可為空的

<?php

$domain = 'domain.com'; //設定網域名稱
$user = 'user'; //設定欲認證的帳號名稱
$password = 'password'; //設定欲認證的帳號密碼

// 使用 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 "認證失敗...";
    }
}
?> 
透過以上的程式,便可以驗證是否 PHP 網頁有成功連線到 AD SERVER ,當然前提是 AD SERVER 要先開啟並建立好帳號,另外 AD SERVER 需開啟防火牆 PORT 389/TCP/UDP。

留言

這個網誌中的熱門文章

c語言-關於#define用法

CMD常用網管指令

PHP 與 JavaScript 之間傳值利用 json