ในสภาพแวดล้อมองค์กรขนาดใหญ่ การจัดการผู้ใช้งาน (User Management) ด้วยฐานข้อมูลภายในระบบเดียวอาจไม่เพียงพอ การเชื่อมต่อระบบเข้ากับ Active Directory (AD) หรือ LDAP Server เป็นแนวทางมาตรฐานที่ช่วยให้เกิด Single Sign-On (SSO) และเพิ่มความปลอดภัยในการยืนยันตัวตน (Authentication) ได้อย่างมีประสิทธิภาพ บทความนี้จะนำเสนอขั้นตอนการผสานรวม Laravel 5 เข้ากับ LDAP/AD โดยใช้ไลบรารี Adldap2 เพื่อให้ระบบของคุณสามารถตรวจสอบสิทธิ์ผู้ใช้จากแหล่งข้อมูลกลางขององค์กร
🛠️ ขั้นตอนที่ 1: การติดตั้งและการตั้งค่าพื้นฐาน
ก่อนเริ่มต้น คุณต้องติดตั้งไลบรารี Adldap2 ผ่าน Composer และทำการ Publish Service Providers เพื่อให้ Laravel สามารถเรียกใช้ Facade ของ Adldap ได้
- ติดตั้งไลบรารี:
Plain Text
composer require adldap2/adldap2-laravel
- ลงทะเบียน Facade: เพิ่ม Alias ในไฟล์
config/app.phpเพื่อให้สามารถเรียกใช้ Adldap ได้อย่างง่ายดาย:PHP
'aliases' => [ 'Adldap' => Adldap\Laravel\Facades\Adldap::class, ],
- Publish Providers: รันคำสั่งเพื่อเผยแพร่ Service Providers ที่จำเป็น:
Plain Text
php artisan vendor:publish --provider="Adldap\Laravel\AdldapServiceProvider"
Plain Text
php artisan vendor:publish --provider="Adldap\Laravel\AdldapAuthServiceProvider"
⚙️ ขั้นตอนที่ 2: การกำหนดค่า LDAP ในไฟล์ .env
การเชื่อมต่อกับ AD ต้องใช้ข้อมูลเฉพาะของ Domain ซึ่งควรเก็บไว้ในไฟล์ .env เพื่อความปลอดภัย ข้อมูลหลักที่ต้องกำหนดได้แก่ IP ของ LDAP Server, Base DN (จุดเริ่มต้นของข้อมูล), และรูปแบบการค้นหาผู้ใช้ (User Format)
Plain Text
LDAP_SCHEMA=ActiveDirectory
LDAP_HOSTS=192.168.1.101
LDAP_BASE_DN=dc=phunsanit
LDAP_USER_ATTRIBUTE=uid
LDAP_USER_FORMAT=uid=%s,cn=users,dc=phunsanit
💡 หลักการสำคัญ: LDAP_USER_FORMAT คือการกำหนดโครงสร้าง DN (Distinguished Name) ที่ระบบจะใช้ค้นหาผู้ใช้ โดยจะแทนที่ %s ด้วย Username ที่ผู้ใช้ป้อนเข้ามา
💾 ขั้นตอนที่ 3: การจัดการข้อมูลผู้ใช้ด้วย PostgreSQL
แม้ว่าการยืนยันตัวตนจะมาจาก LDAP แต่ข้อมูลผู้ใช้บางส่วน เช่น ชื่อที่แสดง (Display Name) หรือสถานะ อาจต้องถูกซิงค์หรือตรวจสอบในฐานข้อมูลหลักของเรา ซึ่งในที่นี้เราใช้ PostgreSQL เป็นหลัก Adldap2 จะทำหน้าที่เป็นตัวตรวจสอบสิทธิ์หลัก แต่เรายังคงต้องใช้ PostgreSQL ในการจัดการข้อมูลเสริม
สมมติว่าเราต้องการตรวจสอบว่าผู้ใช้ที่ล็อกอินสำเร็จจาก LDAP มีข้อมูลในตาราง users ของ PostgreSQL หรือไม่:
SQL
SELECT id, name, phone FROM users WHERE ldap_username = 'pitt.p' LIMIT 1;
คำอธิบาย: การใช้ SELECT statement นี้ช่วยให้เราสามารถดึงข้อมูลผู้ใช้ที่ผ่านการยืนยันตัวตนจาก LDAP มาผูกกับข้อมูลในฐานข้อมูล PostgreSQL ของเราได้อย่างสมบูรณ์
✅ บทสรุป
การผสานรวม Laravel กับ Active Directory ผ่าน Adldap2 ทำให้ระบบของคุณก้าวข้ามขีดจำกัดของการจัดการผู้ใช้แบบเดิม ๆ การกำหนดค่าที่ถูกต้องในไฟล์ .env และการใช้ PostgreSQL ในการจัดการข้อมูลเสริม จะช่วยให้คุณสร้างระบบ Single Sign-On ที่ทั้งปลอดภัยและมีประสิทธิภาพสูง เหมาะสำหรับสภาพแวดล้อมระดับองค์กรอย่างแท้จริง