หมวดหมู่: Cybersecurity

Laravel 5: LDAP.Active Directory (AD )Laravel 5: LDAP.Active Directory (AD )

ในสภาพแวดล้อมองค์กรขนาดใหญ่ การจัดการผู้ใช้งาน (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 ได้

  1. ติดตั้งไลบรารี:

    Plain Text

    composer require adldap2/adldap2-laravel
    
  2. ลงทะเบียน Facade: เพิ่ม Alias ในไฟล์ config/app.php เพื่อให้สามารถเรียกใช้ Adldap ได้อย่างง่ายดาย:

    PHP

    'aliases' => [ 'Adldap' => Adldap\Laravel\Facades\Adldap::class, ],
    
  3. 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 ที่ทั้งปลอดภัยและมีประสิทธิภาพสูง เหมาะสำหรับสภาพแวดล้อมระดับองค์กรอย่างแท้จริง