การเชื่อมต่อ PSU Passport : Drupal6-LDAP (Module LDAP integration)

วิธีการเชื่อมต่อ 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 ดังรูป

drupal-ldap1

5. กลับไปยังหน้า Administer จะปรากฎหัวข้อ LDAP ในหัวข้อ Site Configuration

drupal-ldap2

6. เมื่อเข้าไปจะปรากฎหัวข้อย่อยให้ตั้งค่าดังรูป

drupal-ldap3

7. ทำการตั้งค่า Authentication
-> Settings
drupal-ldap4

-> Add Server
drupal-ldap5

เนื่องจาก 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 ดังรูป

drupal-ldap6

 

สำหรับผู้ที่ต้องการไฟล์ที่แก้แล้วโหลดได้ที่
https://passport.psu.ac.th/ldap/ldap_integration.7z
password : psuldap123$%

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *