Menggunakan Ekstensi OpenLDAP PHP di ServBay
ServBay adalah lingkungan pengembangan web lokal yang kuat dan mendukung berbagai teknologi. Bagi pengembang aplikasi PHP yang perlu berinteraksi dengan server LDAP (Lightweight Directory Access Protocol), ServBay sudah menyediakan ekstensi OpenLDAP PHP yang siap diaktifkan dan digunakan dengan mudah. Dokumen ini akan memandu Anda menggunakan ekstensi ini di lingkungan ServBay untuk mewujudkan autentikasi pengguna, pencarian direktori, dan lain sebagainya.
Apa itu OpenLDAP dan Ekstensi OpenLDAP PHP?
OpenLDAP adalah implementasi open source populer yang menyediakan layanan direktori berbasis protokol LDAP. Protokol LDAP merupakan protokol aplikasi untuk mengakses serta memelihara informasi direktori terdistribusi, dan umum digunakan di lingkungan perusahaan untuk autentikasi identitas pengguna, manajemen struktur organisasi, hingga layanan buku alamat.
Ekstensi OpenLDAP PHP (sering disebut ekstensi ldap
) adalah modul PHP yang menawarkan kumpulan fungsi untuk berkomunikasi dengan server LDAP. Melalui ekstensi ini, aplikasi PHP dapat terhubung ke server LDAP, melakukan binding (autentikasi), pencarian, penambahan, modifikasi, penghapusan entri direktori, dan banyak operasi lainnya.
Fokus utama di ServBay adalah ekstensi client OpenLDAP PHP yang terintegrasi di dalam PHP. Ekstensi ini memungkinkan kode PHP Anda untuk terhubung dan memproses server LDAP eksternal. ServBay sendiri tidak menyediakan server OpenLDAP.
Fitur Utama Ekstensi OpenLDAP PHP
Dengan ekstensi OpenLDAP PHP, Anda dapat:
- Menghubungkan ke Server LDAP: Membuka koneksi ke server LDAP yang ditentukan.
- Melakukan Binding: Autentikasi secara anonim ataupun menggunakan DN (Distinguished Name) dan kata sandi.
- Pencarian Direktori: Mencari entri di direktori berdasarkan filter, basis pencarian, serta cakupan.
- Membaca Informasi Entri: Mengambil atribut dan nilai dari setiap entri hasil pencarian.
- Modifikasi Data: Menambah entri baru, menghapus, serta memodifikasi atribut entri direktori.
- Penanganan Error LDAP: Mengetahui pesan error bila operasi gagal.
Kompatibilitas Versi Ekstensi OpenLDAP PHP di ServBay
ServBay mendukung pemasangan serta pengoperasian banyak versi PHP. Ekstensi OpenLDAP PHP biasanya tersedia dalam distribusi resmi PHP dan sudah tercakup dalam paket PHP yang disusun oleh ServBay. Ini berarti, ketika Anda menggunakan PHP bawaan ServBay, kemungkinan besar ekstensi OpenLDAP sudah dapat langsung digunakan.
Cara Memverifikasi Ekstensi OpenLDAP PHP Sudah Aktif
Walau ServBay dirancang sebagai lingkungan instan yang biasanya telah mengaktifkan ekstensi- ekstensi umum secara default, memeriksa status ekstensi tetap dianjurkan. Cara termudah adalah menggunakan fungsi phpinfo()
.
Di root direktori website ServBay Anda (default:
/Applications/ServBay/www
), buat file PHP baru—misalnya,info.php
.Tambahkan baris berikut ke dalam file
info.php
:php<?php phpinfo(); ?>
1
2
3Akses alamat website yang mengarah ke file tersebut di browser Anda (misal:
http://servbay.demo/info.php
).Pada halaman
phpinfo()
yang muncul, cari bagian bertajukldap
.Jika bagian
ldap
ada dan menampilkan info konfigurasi (misalLDAP Support enabled
), berarti ekstensi OpenLDAP PHP telah berhasil dimuat dan diaktifkan.
Bila bagian ldap
tidak ditemukan, atau LDAP Support
justru bertuliskan disabled, Anda perlu memeriksa konfigurasi build PHP terkait di ServBay atau menghubungi dukungan ServBay. Namun, dalam mayoritas kasus, ekstensi ini aktif secara default.
Menggunakan OpenLDAP di Kode PHP
Setelah memastikan ekstensi OpenLDAP sudah aktif, Anda bisa memakai fungsi-fungsi keluarga ldap_*
di aplikasi PHP untuk berinteraksi dengan server LDAP. Berikut adalah contoh mendasar mulai dari koneksi ke server LDAP, melakukan binding sebagai admin, mencari pengguna, hingga autentikasi pengguna.
Catatan Penting: Seluruh konfigurasi (alamat server LDAP, port, DN admin, password, basis dan filter pencarian, password pengguna) pada contoh di bawah adalah placeholder. Silakan gantikan dengan data riil milik server LDAP Anda. Jangan pernah menyimpan informasi sensitif (seperti password) langsung di kode produksi.
Contoh Kode: Koneksi Dasar, Pencarian, dan Autentikasi
Simpan kode berikut sebagai file PHP (misal, ldap_test.php
) di direktori website ServBay Anda lalu akses via browser untuk menjalankan.
php
<?php
// --- Konfigurasi Koneksi LDAP ---
// Ganti dengan alamat server LDAP Anda. Jika memakai LDAPS (SSL/TLS), gunakan awalan ldaps://, port default 636.
$ldapURI = "ldap://ldap.example.com:389";
// Ganti dengan DN admin LDAP atau user yang punya hak pencarian data
$ldapAdminRdn = "cn=admin,dc=example,dc=com";
// Ganti dengan password untuk DN admin di atas
$ldapAdminPassword = "admin_password";
// --- Konfigurasi Pencarian dan Autentikasi User ---
// Masukkan base DN lokasi user di direktori LDAP
$searchBase = "dc=example,dc=com";
// Filter pencarian user, misal mencari user dengan uid 'servbay-demo'
$searchFilter = "(uid=servbay-demo)";
// Password user yang ingin diautentikasi
$userPasswordToAuthenticate = "user_password_for_servbay_demo";
echo "<h2>Contoh OpenLDAP PHP di ServBay</h2>";
// 1. Koneksi ke server LDAP
echo "<p>Mencoba menghubungkan ke server LDAP: {$ldapURI}...</p>";
$ldapConn = ldap_connect($ldapURI);
if (!$ldapConn) {
die("<p style='color: red;'>Error: Gagal terhubung ke server LDAP.</p>");
}
echo "<p style='color: green;'>Berhasil terhubung ke server LDAP.</p>";
// Set opsi LDAP (biasanya disarankan set versi protokol dan non aktifkan referrals)
ldap_set_option($ldapConn, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($ldapConn, LDAP_OPT_REFERRALS, 0);
// 2. Binding ke server LDAP sebagai admin (untuk operasi pencarian yang butuh hak akses)
echo "<p>Mencoba binding sebagai admin DN '{$ldapAdminRdn}'...</p>";
if (!ldap_bind($ldapConn, $ldapAdminRdn, $ldapAdminPassword)) {
echo "<p style='color: red;'>Error: Binding admin gagal.</p>";
echo "<p style='color: red;'>Error LDAP: " . ldap_error($ldapConn) . "</p>";
ldap_unbind($ldapConn); // Tutup koneksi
die();
}
echo "<p style='color: green;'>Binding admin berhasil.</p>";
// 3. Cari user
echo "<p>Mencoba mencari filter '{$searchFilter}' di base DN '{$searchBase}'...</p>";
$searchResult = ldap_search($ldapConn, $searchBase, $searchFilter);
if (!$searchResult) {
echo "<p style='color: red;'>Error: LDAP search gagal.</p>";
echo "<p style='color: red;'>Error LDAP: " . ldap_error($ldapConn) . "</p>";
ldap_unbind($ldapConn); // Tutup koneksi
die();
}
echo "<p style='color: green;'>Pencarian berhasil.</p>";
// 4. Ambil hasil pencarian
$entries = ldap_get_entries($ldapConn, $searchResult);
if ($entries["count"] > 0) {
echo "<p>Ditemukan {$entries["count"]} entri yang cocok.</p>";
// Anggap hanya user pertama yang penting
$userDn = $entries[0]["dn"];
echo "<p>DN user terdepan: <strong>{$userDn}</strong></p>";
// 5. Coba autentikasi menggunakan DN user & password user yang ditemukan
echo "<p>Mencoba binding autentikasi DN user '{$userDn}' ...</p>";
// Catatan: Ini adalah binding autentikasi user, bukan admin
if (@ldap_bind($ldapConn, $userDn, $userPasswordToAuthenticate)) {
echo "<p style='color: green;'>Autentikasi user berhasil!</p>";
} else {
echo "<p style='color: red;'>Autentikasi user gagal.</p>";
echo "<p style='color: red;'>Error LDAP: " . ldap_error($ldapConn) . "</p>";
}
} else {
echo "<p>Tidak ditemukan user dengan filter '{$searchFilter}'.</p>";
}
// 6. Tutup koneksi LDAP
echo "<p>Menutup koneksi LDAP...</p>";
ldap_unbind($ldapConn);
echo "<p style='color: green;'>Koneksi sudah ditutup.</p>";
?>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
Penjelasan Kode
- Koneksi (
ldap_connect
): Membuka koneksi ke server LDAP dan mengembalikan tanda pengenal koneksi. - Set Opsi (
ldap_set_option
): Mengatur perilaku koneksi.LDAP_OPT_PROTOCOL_VERSION, 3
untuk LDAPv3 (direkomendasikan).LDAP_OPT_REFERRALS, 0
menonaktifkan referrals (biasanya tak dibutuhkan aplikasi dasar). - Binding (
ldap_bind
): Melakukan autentikasi ke server LDAP.- Binding anonim:
ldap_bind($ldapConn)
— tanpa DN & password (akses sangat terbatas). - Binding autentikasi:
ldap_bind($ldapConn, $dn, $password)
— menggunakan DN dan password. Pada contoh di atas, binding admin untuk pencarian, lalu binding user untuk autentikasi user.
- Binding anonim:
- Mencari Entri (
ldap_search
): Mencari entri pada base DN (searchBase
) menggunakan filter (searchFilter
). - Mengambil Hasil (
ldap_get_entries
): Mengekstrak seluruh entri hasil pencarian ke array asosiatif. - Menutup Koneksi (
ldap_unbind
): Memutuskan koneksi ke server LDAP serta membebaskan resource.
Hal-Hal yang Perlu Diperhatikan
- Kebutuhan Server LDAP: Contoh dan penjelasan ini hanya menyangkut penggunaan ekstensi client OpenLDAP di PHP. Anda butuh sebuah server LDAP yang dapat diakses, baik instalasi lokal (di luar ServBay) maupun server LDAP/Active Directory perusahaan.
- Keamanan: Untuk lingkungan produksi, hindari menaruh kredensial LDAP di kode. Gunakan variabel environment, file config terproteksi, dan utamakan koneksi terenkripsi LDAPS (port 636), bukan koneksi LDAP polos (port 389).
- Penanganan Error: Penanganan error pada contoh masih dasar, sebaiknya Anda tambah mekanisme logging dan penanganan error yang lebih baik sesuai kebutuhan aplikasi.
- Format DN: Pastikan penulisan DN (Distinguished Name) sepenuhnya menyesuaikan dengan format yang ditetapkan server LDAP Anda.
FAQ (Pertanyaan yang Sering Diajukan)
T: Saya tidak menemukan bagian ldap
di output phpinfo()
atau statusnya disabled, apa yang harus saya lakukan?
J: Di ServBay, ekstensi OpenLDAP PHP umumnya aktif secara default. Pastikan Anda melihat output phpinfo() dari versi PHP yang tepat di ServBay. Jika tetap tidak muncul, mungkin ada kendala pada versi ServBay atau instalasi Anda. Coba reinstall paket PHP yang bersangkutan atau hubungi dukungan ServBay.
T: Kode PHP saya gagal dengan pesan Call to undefined function ldap_connect()
J: Artinya ekstensi OpenLDAP PHP belum termuat atau aktif. Silakan crosscheck dengan langkah phpinfo()
untuk konfirmasi status ekstensi.
T: Ekstensi sudah aktif, tapi binding atau koneksi gagal dengan pesan error dari LDAP.
J: Pastikan konfigurasi koneksi Anda (alamat, port) dan kredensial binding (DN, password) sudah benar. Pesan error dari fungsi ldap_error()
biasanya cukup deskriptif—misal "Invalid credentials" (kredensial salah) atau "Can't contact LDAP server" (server tidak terjangkau jaringan). Pastikan juga server LDAP berjalan serta dapat diakses dari mesin ServBay.
Ringkasan
ServBay menyediakan solusi cepat dan mudah untuk menggunakan ekstensi OpenLDAP PHP. Cukup dengan verifikasi sederhana, Anda bisa memastikan lingkungan PHP sudah siap untuk integrasi dengan server LDAP. Berbekal pustaka fungsi LDAP yang lengkap di PHP, pengembang dapat dengan mudah menambahkan fitur autentikasi pengguna, pencarian data direktori, dan fitur enterprise lain pada aplikasi web lokal yang dikembangkan di ServBay, sehingga memperluas skenario dan manfaat aplikasi Anda.