2012年2月15日 星期三

使用php 連結ad server 執行認證

先研究 LDAP
http://tw.php.net/ldap
或參考
http://www.developer.com/lang/php/article.php/3100951

下面程式來自
http://yu-minspace.blogspot.com/2007/04/php-windows-server-ad-windows-server-ad.html

以下的程式範例為精簡版,帳號和密碼不可為空的
<?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 "認證失敗...";
}
}
?>

另外的網頁連結
Integrating Active Directory with PHP
http://www.developer.com/lang/php/article.php/3100951

Active Directory Authentication using LDAP + PHP
http://lists.nyphp.org/pipermail/talk/2004-February/008171.html

LDAP Functions
http://tw.php.net/ldap

More
http://www.google.com.tw/search?hl=zh-TW&q=php+ad+server+how+auth&meta=


另外的程式範例
使用環境:Windows Server 2008 (AD環境)

$user=設定欲認證的帳號名稱
$password=設定欲認證的帳號密碼
$domain = 設定網域名稱
$ldap_server = WINDOWS AD SERVER IP

$ds=ldap_connect($ldap_server) or die("SORRY~~Could not cnnect to AD SERVER!!");
$dn=$user."@".$domain;
@$ldapbind=ldap_bind($ds,$dn,$password);
if($ldapbind){
echo "SUCCESS!!";
}else{
echo "Fail!!";
}

2012年1月26日 星期四