login with user from active directory อยากให้ระบบตรวจสอบ user na หน้าหลักเว็บบอร์ดทั่วไปlogin with user from active directory อยากให้ระบบตรวจสอบ user na kitsana freeman หากต้องการให้ login โดยใช้ user name ,password จาก active directory ต้องแก้ไขอย่างไรครับ กรกฎ วิริยะ LDAP ใช่มั้ยครับ ดูที่คลาส \Gcms\Login เลยครับ เปลี่ยนส่วนตรวจสอบจากฐานข้อมูลเป็น LDAP ครับ kitsana freeman ผมเคยทำในลักษณะ Submit Method Post แล้วส่งค่ามากับตัวแปร รบกวนไกด์ให้หน่อยครับ ค่าที่ใช้ในการตรวจสอบจะประมาณนี้ครับ function authenticate($user, $password) { if(empty($user) || empty($password)) return false; // active directory server $ldap_host = "ldap.domain.com"; // active directory DN (base location of ldap search) $ldap_dn = "OU=Department,DC=domain,DC=com"; // active directory user group name $ldap_user_group = "IT"; // active directory manager group name $ldap_manager_group = "HR"; // domain, for purposes of constructing $user $ldap_usr_dom = '@domain.com'; // connect to active directory $ldap = ldap_connect($ldap_host); // configure ldap params ldap_set_option($ldap,LDAP_OPT_PROTOCOL_VERSION,3); ldap_set_option($ldap,LDAP_OPT_REFERRALS,0); // verify user and password if($bind = @ldap_bind($ldap, $user.$ldap_usr_dom, $password)) { // valid // check presence in groups $filter = "(sAMAccountName=".$user.")"; $attr = array("memberof"); $result = ldap_search($ldap, $ldap_dn, $filter, $attr) or exit("Unable to search LDAP server"); $entries = ldap_get_entries($ldap, $result); ldap_unbind($ldap); // check groups $access = 0; foreach($entries[0]['memberof'] as $grps) { // is manager, break loop if(strpos($grps, $ldap_manager_group)) { $access = 2; break; } // is user if(strpos($grps, $ldap_user_group)) $access = 1; } if($access != 0) { // establish session variables $_SESSION['user'] = $user; $_SESSION['access'] = $access; return true; } else { // user has no rights return false; } } else { // invalid name or password return false; } } กรกฎ วิริยะ ขั้นตอนการ Login ของคชสารเป็นดังนี้ครับ 1.ตรวจสอบ username+password กับฐานข้อมูล ขั้นตอนนี้ ทดแทนได้ด้วย LDAP ครับ อยู่ใน Gcms/Login สามารถแก้ไขหรือเปลี่ยนได้เอง (ไม่น่ายาก แต่ถ้าทพไม่ได้ ข้อถัดไปยากกว่าอีก) 2.ถ้า Login สำเร็จ จะบันทึกการ login ลง session ที่ $_SESSION['login'] และ password จะถูกแทนที่ด้วย Token 3.การตรวจสอบการ Login คราวต่อไป จะใช้ Token ในการตรวจสอบการเข้าระบบ ปัญหาของการใช้ LDAP หลักๆก็คือ เมื่อมีการ login ด้วย LDAP แล้ว จะต้องมีการลงทะเบียนสมาชิก กับระบบ เนื่องจากข้อมูลจาก LDAP อาจไม่สอดคล้องกับที่ระบบต้องการ และ ใช้ในการลงทะเบียน Token ด้วย ลองทำดูนะครับ ความคิดเห็น รายละเอียด ไฟล์อัปโหลด ชนิด jpg, jpeg, png ขนาดไฟล์ไม่เกิน 2M ส่งความคิดเห็น
ดูที่คลาส \Gcms\Login เลยครับ เปลี่ยนส่วนตรวจสอบจากฐานข้อมูลเป็น LDAP ครับ
function authenticate($user, $password) {
if(empty($user) || empty($password)) return false;
// active directory server
$ldap_host = "ldap.domain.com";
// active directory DN (base location of ldap search)
$ldap_dn = "OU=Department,DC=domain,DC=com";
// active directory user group name
$ldap_user_group = "IT";
// active directory manager group name
$ldap_manager_group = "HR";
// domain, for purposes of constructing $user
$ldap_usr_dom = '@domain.com';
// connect to active directory
$ldap = ldap_connect($ldap_host);
// configure ldap params
ldap_set_option($ldap,LDAP_OPT_PROTOCOL_VERSION,3);
ldap_set_option($ldap,LDAP_OPT_REFERRALS,0);
// verify user and password
if($bind = @ldap_bind($ldap, $user.$ldap_usr_dom, $password)) {
// valid
// check presence in groups
$filter = "(sAMAccountName=".$user.")";
$attr = array("memberof");
$result = ldap_search($ldap, $ldap_dn, $filter, $attr) or exit("Unable to search LDAP server");
$entries = ldap_get_entries($ldap, $result);
ldap_unbind($ldap);
// check groups
$access = 0;
foreach($entries[0]['memberof'] as $grps) {
// is manager, break loop
if(strpos($grps, $ldap_manager_group)) { $access = 2; break; }
// is user
if(strpos($grps, $ldap_user_group)) $access = 1;
}
if($access != 0) {
// establish session variables
$_SESSION['user'] = $user;
$_SESSION['access'] = $access;
return true;
} else {
// user has no rights
return false;
}
} else {
// invalid name or password
return false;
}
}
1.ตรวจสอบ username+password กับฐานข้อมูล ขั้นตอนนี้ ทดแทนได้ด้วย LDAP ครับ อยู่ใน Gcms/Login สามารถแก้ไขหรือเปลี่ยนได้เอง (ไม่น่ายาก แต่ถ้าทพไม่ได้ ข้อถัดไปยากกว่าอีก)
2.ถ้า Login สำเร็จ จะบันทึกการ login ลง session ที่ $_SESSION['login'] และ password จะถูกแทนที่ด้วย Token
3.การตรวจสอบการ Login คราวต่อไป จะใช้ Token ในการตรวจสอบการเข้าระบบ
ปัญหาของการใช้ LDAP หลักๆก็คือ เมื่อมีการ login ด้วย LDAP แล้ว จะต้องมีการลงทะเบียนสมาชิก กับระบบ เนื่องจากข้อมูลจาก LDAP อาจไม่สอดคล้องกับที่ระบบต้องการ และ ใช้ในการลงทะเบียน Token ด้วย ลองทำดูนะครับ