login with user from active directory อยากให้ระบบตรวจสอบ user na

หากต้องการให้ login โดยใช้ user name ,password จาก active directory ต้องแก้ไขอย่างไรครับ
29 ม.ค. 2562 3 3,947

LDAP ใช่มั้ยครับ
ดูที่คลาส \Gcms\Login เลยครับ เปลี่ยนส่วนตรวจสอบจากฐานข้อมูลเป็น LDAP ครับ
#1

ผมเคยทำในลักษณะ 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;
}
}
#2

ขั้นตอนการ Login ของคชสารเป็นดังนี้ครับ
1.ตรวจสอบ username+password กับฐานข้อมูล ขั้นตอนนี้ ทดแทนได้ด้วย LDAP ครับ อยู่ใน Gcms/Login สามารถแก้ไขหรือเปลี่ยนได้เอง (ไม่น่ายาก แต่ถ้าทพไม่ได้ ข้อถัดไปยากกว่าอีก)
2.ถ้า Login สำเร็จ จะบันทึกการ login ลง session ที่ $_SESSION['login'] และ password จะถูกแทนที่ด้วย Token
3.การตรวจสอบการ Login คราวต่อไป จะใช้ Token ในการตรวจสอบการเข้าระบบ

ปัญหาของการใช้ LDAP หลักๆก็คือ เมื่อมีการ login ด้วย LDAP แล้ว จะต้องมีการลงทะเบียนสมาชิก กับระบบ เนื่องจากข้อมูลจาก LDAP อาจไม่สอดคล้องกับที่ระบบต้องการ และ ใช้ในการลงทะเบียน Token ด้วย ลองทำดูนะครับ
#3
ความคิดเห็น
ไฟล์อัปโหลด ชนิด jpg, jpeg, png ขนาดไฟล์ไม่เกิน 2M