วิธีการเชื่อมต่อ PSU Passport ด้วย Drupal6 ผ่าน LDAPS Module LDAP integration
ทดสอบบน : Windows 2008 R2 / IIS 7.5 / Drupal 6.34 / LDAP integration 6.x-1.x-dev
ขั้นตอนการติดตั้ง Module LDAP integration และการตั้งค่า Module
1. โหลด Module จาก Web Site : http://drupal.org/project/ldap_integration
2. ทำการติดตั้ง Module ตามปกติ (Copy วางไว้ใน Directory Modules)
3. Login เข้าไปเปิด Module (Administer->Site building->Modules->LDAP integration)
4. ทำการ Enable Module ดังรูป
5. กลับไปยังหน้า Administer จะปรากฎหัวข้อ LDAP ในหัวข้อ Site Configuration
6. เมื่อเข้าไปจะปรากฎหัวข้อย่อยให้ตั้งค่าดังรูป
7. ทำการตั้งค่า Authentication
-> Settings

เนื่องจาก Module นี้ Default เป็นโหมด Bind and Search ซึ่งต้องสังเวย Account (อาจจะขอมาทางศูนย์คอมให้สร้าง Application Account ได้ครับ) ซึ่งค่า DN ได้มาอย่างไร สามารถตรวจสอบได้จาก https://passport.psu.ac.th/aspldap/
โดยสามารถ Add ได้มากกว่า 1 server เพื่อสำรองในกรณีที่ Server หลักตายครับ
สำหรับวิธีการใช้งานแบบ Bind Direct ที่ไม่ต้องใช้ User ในการ Search (ไม่ต้องใช้ Application Account) ต้องแก้ไข Code ดังนี้
ไฟล์ ldapauth.module (แก้ไขส่วนที่ 1)
แก้บรรทัดประมาณบรรทัดที่ 565
if (!($ldap = _ldapauth_user_lookup($name)) || !isset($ldap[‘dn’]))
เป็นข้อความดังนี้
...
function _ldapauth_auth($name, $pass, $create_account = FALSE) {
global $_ldapauth_ldap;
// Don't allow empty passwords because they cause problems on some setups.
// http://drupal.org/node/87831
if (empty($pass))
return FALSE;
// Cycle through LDAP configurations. First one to succeed wins.
$result = db_query("SELECT sid FROM {ldapauth} WHERE status = 1 ORDER BY weight");
while ($row = db_fetch_object($result)) {
// Initialize LDAP.
if (!_ldapauth_init($row->sid))
return FALSE;
// Look up the user in LDAP.
// if (!($ldap = _ldapauth_user_lookup($name)) || !isset($ldap['dn']))
if (!($ldap = _ldapauth_user_lookup($name,$pass)) || !isset($ldap['dn']))
continue;
...
ไฟล์ ldapauth.module (แก้ไขส่วนที่ 2)
แก้บรรทัดประมาณบรรทัดที่ 614
$success = $_ldapauth_ldap->connect($_ldapauth_ldap->getOption(‘binddn’), $_ldapauth_ldap->getOption(‘bindpw’));
เป็นข้อความดังนี้
...
function _ldapauth_user_lookup($name,$pass) {
global $_ldapauth_ldap;
if (!$_ldapauth_ldap)
return;
// Transform login name.
$login_name = ($code = _ldapauth_ldap_info($_ldapauth_ldap->getOption('sid'), 'login_php')) ? eval($code) : $name;
// If there is no bindn and bindpw - the connect will be an anonymous connect.
// $success = $_ldapauth_ldap->connect($_ldapauth_ldap->getOption('binddn'), $_ldapauth_ldap->getOption('bindpw'));
$success = $_ldapauth_ldap->connect($name."@psu", $pass);
...
โดยหลังจากแก้ไขแล้วไม่จำเป็นต้องใส่ Application Account และ Password ดังรูป
สำหรับผู้ที่ต้องการไฟล์ที่แก้แล้วโหลดได้ที่
https://passport.psu.ac.th/ldap/ldap_integration.7z
password : psuldap123$%






Leave a Reply