วันอาทิตย์ที่ 23 สิงหาคม พ.ศ. 2552

การใช้ LDAP ร่วมกับ OLAT

เขียนโดย นรพล Naraphol (ยอด Yod) ที่ 16:10
การตรวจสอบชื่อผู้ใช้และรหัสผ่านใน OLAT ทำได้ 3 วิธีคือ
  1. แบบปกติโดยใช้ OLAT component
  2. แบบ Shibboleth authentication
  3. แบบ LDAP authentication
จะขออธิบายถึงแบบที่สามนะครับคือการใช้ LDAP นะครับ โดยจะเป็นการใช้ Apache DS เป็น Server สำหรับข้อมูลเกียวกับพื้นฐาน LDAP และการติดตั้ง/ใช้งาน Apache DS ดูได้ตามนี้ดังนี้ครับ
  1. LDAP คืออะไร
  2. การติดตั้ง Apache DS
  3. การติดต่อกับ ApacheDS ด้วย Eclipse
Function ของ LDAP ใน OLAT
  1. import User ได้ที่ละหลายๆรายการจาก LDAP ในครั้งเดียว
  2. สร้าง User ใหม่ใน OLAT เมื่อ loging ครั้งแรก โดยนำข้อมูลมาจาก LDAP
  3. กำหนดให้ตรวจสอบ username และ password แบบ real time / offline ได้ โดยถ้าเป็นแบบ real time จะทำการตรวจสอบ username และ password ไปที่ LDAP ทุกครั้ง แต่แบบ offline จะตรวจสอบจาก username และ password ที่เก็บอยู่ใน OLAT
  4. สามารถกำหนดให้มี cache สำหรับเก็บ LDAP password ในกรณีที่ไม่สามารถติดต่อกับ LDAP ได้
  5. สามารถกำหนดให้นำรายชื่อจาก LDAP มาแทนด้วยรายชื่อเดิม
  6. สามารถ map attribute ของ LDAP ให้ตรงกับ user properties ของ OLAT
  7. สามารถกำหนดให้รองรับ multiple base หรือกลุ่มใน LDAP ได้หลายกลุ่ม
  8. รองรับ LDAP server ได้หลากหลายเช่น Apache DA, OpenLDAP, Microsoft Active Directory
  9. รองรับ SSL
การ setup LDAP ในไฟล์ build.properties
  1. ldap.enable=true
  2. ldap.ldapUrl=ldap://localhost:10389
    กำหนด url/port ของ LDAP server
  3. ldap.ldapSystemDN=uid=admin,ou=system
    กำหนด DN หรือ user ที่มีสิทธิ login เข้า LDAP server
  4. ldap.ldapSystemPW=secret
    กำหนด password ของ DN หรือ user ที่มีสิทธิ login เข้า LDAP server
  5. ldap.ldapBases=ou=users,ou=system
    กำหนด base ที่เก็บรายชื่อผู้ใช้ที่ต้องการนำเข้า OLAT
  6. ldap.cacheLDAPPwdAsOLATPwdOnLogin=true
    กำหนดให้ OLAT เก็บ password ของ LDAP แบบเข้ารหัสไว้ด้วยเพื่อใช้เวลาที่ไม่สามารถติดต่อกับ LDAP ได้ (ถ้ากำหนดให้เป็น true ต้องกำหนด password.change.allowed=false แต่ถุ้ากำหนดเป็น false ต้องแน่ใจว่า LDAP server online ตลอดเวลาระหว่างใช้ OLAT)
  7. ldap.convertExistingLocalUsersToLDAPUsers=true
    กำหนดให้ OLAT เปลี่ยน LDAP user ที่มีอยู่แล้วใน OLAT (แต่ยังไม่ได้ถูกกำหนดให้เป็น LDAP user) มาเป็น LDAP user (ถ้ากำหนดให้เป็น ture ไม่ควรจะมี user ชื่อ administrator อยู่ใน LDAP base)
  8. ldap.deleteRemovedLDAPUsersOnSync=true
    กำหนดให้ทำการลบผู้ใช้ใน OLAT (ที่ถูกสร้างผ่าน LDAP sync) เมื่อไม่พบผู้ใช้ใน LDAP โดยอัตโนมัติ
  9. ldap.deleteRemovedLDAPUsersPercentage=50
    กำหนดจำนวนเปอร์เซ็นของการลบผู้ใช้ (ldap.deleteRemovedLDAPUsersOnSync=true) ว่าถ้าจำนวนผู้ใช้ที่หาไม่พบใน LDAP server เกินจากจำนวนเปอร์เซ็นที่กำหนด ให้ถือว่าไม่ต้องทำการลบผู้ใช้เนื่องจากอาจเป็นข้อผิดพลาดที่อาจเกิดขึ้นเมื่อ LDAP server ใช้งานไม่ได้ชั่วขณะ (กำหนด 0 = ไม่ทำการลบทุกกรณี / กำหนด 100 = ลบทุกกรณี)
  10. ldap.ldapSyncOnStartup=true
    กำหนดให้ทำการ Sync เพื่อสร้าง user โดยอัตโนมัติ (ถ้ากำหนดเป็น false ทำให้ user จะถูกสร้างเมื่อ login)
  11. ldap.ldapSyncCronSync=true
    กำหนดให้ใช้ CronTrigger ระบุตารางเวลาการ Sync
  12. ldap.ldapSyncCronSyncExpression=0 0 * * * ?
    ระบุตารางเวลาการ Sync เช่น ทุกๆ ชั่วโมง (วิธีการกำหนด CronTrigger)
  13. ldap.ldapUserObjectClass=person
    กำหนด user attribute ของ LDAP
  14. ldap.attributename.useridentifyer=uid
    กำหนดการ map username ของ OLAT กับ attribute ของ LDAP
  15. ldap.attributename.email=mail
    กำหนดการ map email ของ OLAT กับ attribute ของ LDAP
  16. ldap.attributename.firstName=givenName
    กำหนดการ map firstName ของ OLAT กับ attribute ของ LDAP
  17. ldap.attributename.lastName=sn
    กำหนดการ map lastName ของ OLAT กับ attribute ของ LDAP
  18. olatprovider.enable=false
    กำหนดไม่ให้ login ด้วย OLAT (ถ้าเป็น false ต้องกำหนด default.auth.provider = LDAP แต่ถ้าเป็น true จะสามารถสลับหน้า login ไปมาได้ โดยสามารถกำหนด default.auth.provider = OLAT หรือ LDAP เพื่อให้เริ่มเป็นหน้าแรก)
  19. default.auth.provider=OLAT
    กำหนดหน้าที่ใช้ login เริ่มต้น สามารถเปลียนได้ระหว่าง OLAT (local logins) / Shib (เมื่อใช้ Shibboleth) /LDAP (เมื่อใช้ LDAP)
  20. เมื่อแก้ไขทุกอย่างเสร็จก็ใช้คำสั่ง ant config-all
เริ่มใช้งานครั้งแรกกับ LDAP
  1. Start LDAP server
  2. เพิ่มรายการผู้ใช้ลงไปใน LDAP ที่ ou=users,ou=system (ต้องตรงกับที่กำหนดไว้ใน build.properties > ldap.ldapBases) ตามตัวอย่างจะมี admin,yod1498,yod2,yoda, it>yod1, marketing>yim
  3. Start Tomcat แล้ว OLAT จะ Sync ข้อมูล user โดยอัตโนมัติตามที่กำหนดไว้ใน build.properties > ldap.ldapSyncOnStartup=true ลองตรวจสอบข้อมูลผู้ใช้ได้โดย login ด้วย admin แล้วไปที่ User management > User search จะเห็นรายชื่อพร้อมด้วย Properties ทั้งหมด จาก LDAP ได้ถูก copy มาไว้ใน OLAT โดย user ที่ copy มาจะรวมถึงในโฟลเดอร์ย่อยด้วย (it>yod1, marketing>yim)
  4. ลอง login ด้วย user ที่เพิ่งถูก Sync มา หน้าจอจะขึ้นว่า OLAT login via LDAP แสดงว่าเรากำลังใช้ LDAP อยู่ (ถ้ากำหนด ldap.cacheLDAPPwdAsOLATPwdOnLogin=false ข้อมูล password จะถูกตรวจสอบไปที่ LDAP server โดยตรง)
  5. ถ้าได้ติดตั้งระบบ Chat เมื่อดูข้อมูล Users > User Summary ก็จะเห็นว่าข้อมูลผู้ใช้ได้ทำการ Sync มาที่ Openfire เช่นเดียวกัน
การ Sync ข้อมูลระหว่าง OLAT และ LDAP
  1. กำหนดแบบอัตโนมัติ ให้ Sync ตามเงื่อนไขที่กำหนดไว้ใน build.properties
    ldap.ldapSyncOnStartup=true กำหนดให้ทำการ Sync เพื่อสร้าง user โดยอัตโนมัติ (ถ้ากำหนดเป็น false ทำให้ user จะถูกสร้างเมื่อ login)
    ldap.ldapSyncCronSync=true กำหนดให้ใช้ CronTrigger ระบุตารางเวลาการ Sync
    ldap.ldapSyncCronSyncExpression=0 0 * * * ? ระบุตารางเวลาการ Sync เช่น ทุกๆ ชั่วโมง (วิธีการกำหนด CronTrigger)
  2. กำหนดแบบ manual ให้ลบข้อมูลผู้ที่ไม่มีใน LDAP ออกจาก OLAT และ sync รายชื่อผู้ใช้ ที่ Administration > LDAP
การแก้ไขข้อมูล Attribute ในการ Sync
ในไฟล์ build.propreties > ldap.attributename สามารถกำหนด attribute สำหรับการ Sync ได้เพียง 4 ตัวเท่านั้นคือ useridentifyer, email, firstName, lastName และยังไม่สามารถกำหนด attribute ที่จำเป็น (required) ในการ Sync โดยถ้าต้องการปรับเปลี่ยนข้อมูลเหล่าสามารถทำได้ที่ WEB-INF/src/serviceconfig/org/olat/ldap/_spring/olatextconfig.xml
  1. property name="reqAttrs" กำหนด attribute ที่จำเป็น (required) ในการ Sync เช่น กำหนดให้ต้องมี useridentifyer และ email
    entry key='${ldap.attributename.useridentifyer}' value='userID'
    entry key='${ldap.attributename.email}' value='email'
  2. property name="staticUserProperties" กำหนดค่าเริ่มต้นให้กับ attribute ที่ต้องการ เช่นกำหนดให้ institutionalName มีค่าเป็น MyInstitution
    entry key='institutionalName' value='MyInstitution'
  3. property name="userAttributeMapper" กำหนด attribute สำหรับการ Sync เช่นกำหนดให้ Sync ข้อมูล useridentifyer, email, firstName, lastName, employeeType, businessCategory
    entry key='${ldap.attributename.useridentifyer}' value='userID'
    entry key='${ldap.attributename.email}' value='email
    entry key='${ldap.attributename.firstName}' value='firstName'
    entry key='${ldap.attributename.lastName}' value='lastName'
    entry key='employeeType' value='orgUnit'
    entry key='businessCategory' value='institutionalName'

    ตัวอย่างกำหนด Attribute ในการ Sync ข้อมูลจาก LDAP
    ไปยัง OLAT
การกำหนดรูปแบบการ Login
การใช้ LDAP สามารถกำหนดรูปแบบการ Login ได้ 3 แบบ โดยกำหนดได้จาก build.properties > olatprovider.enable และ default.auth.provider
  1. กำหนดให้ Login ด้วย LDAP เท่านั้น (olatprovider.enable=false และ default.auth.provider=LDAP)
  2. กำหนดให้ Login ได้ทั้ง LDAP และ OLAT โดยเริ่มจากหน้า OLAT แล้วสามารถปรับไปเป็นหน้า LDAP ได้ (olatprovider.enable=true และ default.auth.provider=OLAT)
  3. กำหนดให้ Login ได้ทั้ง LDAP และ OLAT โดยเริ่มจากหน้า LDAP แล้วสามารถปรับไปเป็นหน้า OLAT ได้ (olatprovider.enable=true และ default.auth.provider=LDAP)

0 ความคิดเห็น on "การใช้ LDAP ร่วมกับ OLAT"

แสดงความคิดเห็น

 

naraphol.blogspot.com Copyright 2009 Reflection Designed by Ipiet Templates Image by Tadpole's Notez