ServBay'de PHP'nin OpenLDAP Eklentisinin Kullanımı
ServBay, çok çeşitli teknoloji yığınlarını destekleyen güçlü bir yerel web geliştirme ortamıdır. LDAP (Lightweight Directory Access Protocol - Hafif Dizin Erişim Protokolü) sunucuları ile etkileşim gerektiren PHP uygulama geliştiricileri için, ServBay PHP'nin OpenLDAP eklentisini dahili olarak sunar ve bu sayede kolayca etkinleştirip kullanabilirsiniz. Bu makale, ServBay ortamında bu eklentiyi kullanarak kullanıcı kimlik doğrulama, dizin sorgulama gibi işlevlerin nasıl gerçekleştirileceğini adım adım gösterecektir.
OpenLDAP ve PHP'nin OpenLDAP Eklentisi Nedir?
OpenLDAP; LDAP protokolüne dayalı dizin hizmetleri sağlayan, yaygın olarak kullanılan açık kaynaklı bir uygulamadır. LDAP protokolü, dağıtık dizin bilgi servislerine erişim ve onların yönetimi için kullanılan ve özellikle kurumsal ortamlarda kimlik doğrulama, organizasyon yapısı yönetimi ve adres defteri hizmetleri gibi alanlarda yaygın şekilde uygulanan bir uygulama protokolüdür.
PHP OpenLDAP Eklentisi (genellikle ldap
eklentisi olarak anılır), PHP dilinin bir modülüdür ve LDAP sunucularıyla iletişime olanak tanıyan fonksiyonlar içerir. Bu eklenti sayesinde, PHP uygulamalarınız bir LDAP sunucusuna bağlanabilir; bağlanma (kimlik doğrulama), arama, giriş ekleme, değiştirme, silme gibi dizin işlemlerini gerçekleştirebilir.
ServBay'de asıl ilgilendiğimiz kısım PHP'nin içindeki bu OpenLDAP istemci eklentisidir; böylece PHP kodunuz harici bir LDAP sunucusuna bağlanıp üzerinde işlem yapabilir. ServBay’in kendisinde herhangi bir OpenLDAP sunucusu bulunmamaktadır.
PHP OpenLDAP Eklentisinin Başlıca Özellikleri
PHP OpenLDAP eklentisi ile şunları yapabilirsiniz:
- LDAP Sunucusuna Bağlanmak: Belirttiğiniz LDAP sunucusuna bağlantı kurabilirsiniz.
- Bağlanma (Bind) İşlemleri: İsimsiz (anonim) veya DN (Distinguished Name) ve şifre ile kimlik doğrulama bağlantısı kurabilirsiniz.
- Dizin Araması Yapmak: Filtre, arama tabanı ve kapsam belirterek dizinde kayıt arayabilirsiniz.
- Kayıt Bilgilerini Okumak: Arama sonucu dönen her bir dizin kaydına ait özellik ve değerleri alabilirsiniz.
- Kayıtları Değiştirmek: Yeni kayıt ekleyebilir, mevcut kaydı silebilir veya kayıtların özelliklerini güncelleyebilirsiniz.
- LDAP Hatalarını Yönetmek: İşlemler başarısız olursa hata mesajlarını görebilirsiniz.
ServBay'de PHP OpenLDAP Eklentisi ve Sürüm Uyumluluğu
ServBay, birden fazla PHP sürümünü yükleyip çalıştırmayı destekler. OpenLDAP eklentisi genellikle PHP’nin resmi dağıtımlarında yer alır ve ServBay’in PHP paketlerinde varsayılan olarak etkinleştirilmiş bulunur. Yani, ServBay’in sunduğu PHP sürümlerini kullanıyorsanız, muhtemelen ek bir işlem yapmadan OpenLDAP eklentisini kullanmaya hazırsınız.
PHP OpenLDAP Eklentisinin Etkin Olup Olmadığı Nasıl Doğrulanır?
ServBay, kutudan çıkar çıkmaz kullanıma hazır bir ortam sunmayı amaçlar ve genellikle sık kullanılan eklentileri önceden etkinleştirir. Yine de kurulumunuzu doğrulamak için kontrol etmeniz önerilir. En kolay yol, phpinfo()
fonksiyonunu kullanmaktır:
ServBay sitenizin kök dizininde (varsayılan olarak
/Applications/ServBay/www
) yeni bir PHP dosyası oluşturun. Örneğin,info.php
.info.php
dosyasına aşağıdaki içeriği ekleyin:php<?php phpinfo(); ?>
1
2
3ServBay’de bu dosyanın bulunduğu site adresini tarayıcıda açın (örn.
http://servbay.demo/info.php
).Açılan
phpinfo()
sayfasındaldap
adında bir bölüm arayın.Eğer
ldap
bölümü görünüyor ve örneğinLDAP Support enabled
şeklinde bilgiler içeriyorsa, PHP'nin OpenLDAP eklentisi başarıyla yüklenmiş ve etkinleştirilmiş demektir.
Eğer ldap
bölümü yoksa veya LDAP Support
etkin değil olarak görünüyorsa, kullandığınız PHP sürümünün ServBay üzerindeki derleme yapılandırmasını kontrol etmeniz veya ServBay desteğiyle iletişime geçmeniz gerekebilir. Ancak çoğu durumda varsayılan olarak etkindir.
PHP Kodunda OpenLDAP’ın Kullanımı
OpenLDAP eklentisinin etkin olduğunu doğruladıktan sonra, PHP uygulamalarınızda ldap_*
fonksiyonlarını kullanarak LDAP sunucusuyla etkileşim kurabilirsiniz. Aşağıda temel bir örnek kodla LDAP’e nasıl bağlanacağınız, yöneticiyle kimlik doğrulama, kullanıcı arama ve kullanıcı doğrulama işlemlerinin nasıl yapılacağını görebilirsiniz.
Önemli Not: Aşağıdaki örnek kodda geçen LDAP sunucu adresi, port, yönetici DN, şifre, arama tabanı, kullanıcı filtresi ve kullanıcı şifresi gibi bilgilerin yer tutucu olduğunu unutmayın. Gerçek ortamda kendi LDAP sunucunuzun bilgileriyle güncellemelisiniz. Ayrıca, üretim ortamlarında hassas bilgileri (şifre gibi) doğrudan kodda saklamayın.
Örnek Kod: Temel Bağlantı, Arama ve Kimlik Doğrulama
Aşağıdaki kodu, ServBay sitesi dizininde bir PHP dosyası olarak (örneğin, ldap_test.php
) kaydedin ve tarayıcıda çalıştırın.
<?php
// --- LDAP Bağlantı Ayarları ---
// Kendi LDAP sunucu adresinizi girin. LDAPS (SSL/TLS) kullanacaksanız ldaps:// öneki ve 636 portunu tercih edin.
$ldapURI = "ldap://ldap.example.com:389";
// LDAP yöneticisinin veya arama yetkisi olan bir kullanıcının DN'si (Distinguished Name) ile değiştirin
$ldapAdminRdn = "cn=admin,dc=example,dc=com";
// Yukarıda belirttiğiniz yönetici DN'sine ait şifre ile değiştirin
$ldapAdminPassword = "admin_password";
// --- Kullanıcı Arama ve Kimlik Doğrulama Ayarları ---
// Kendi LDAP dizin yapınıza göre kullanıcı arama tabanı DN'sini girin
$searchBase = "dc=example,dc=com";
// Belirli bir kullanıcıyı aramak için kullanılacak filtre. Örneğin, 'servbay-demo' adlı kullanıcının uid'siyle arama
$searchFilter = "(uid=servbay-demo)";
// Doğrulamasını test etmek istediğiniz kullanıcının şifresiyle değiştirin
$userPasswordToAuthenticate = "user_password_for_servbay_demo";
echo "<h2>ServBay'de PHP OpenLDAP Örneği</h2>";
// 1. LDAP sunucusuna bağlan
echo "<p>LDAP sunucusuna bağlanılıyor: {$ldapURI}...</p>";
$ldapConn = ldap_connect($ldapURI);
if (!$ldapConn) {
die("<p style='color: red;'>Hata: LDAP sunucusuna bağlanılamadı.</p>");
}
echo "<p style='color: green;'>LDAP sunucusuna başarıyla bağlanıldı.</p>";
// LDAP seçeneklerini ayarla (Genellikle protokol sürümü ve referrals kapatılması önerilir)
ldap_set_option($ldapConn, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($ldapConn, LDAP_OPT_REFERRALS, 0);
// 2. Yönetici bilgileriyle LDAP sunucusuna bağlan (arama gibi yetki gerektiren işlemler için)
echo "<p>Yönetici DN '{$ldapAdminRdn}' ile bağlanma deneniyor...</p>";
if (!ldap_bind($ldapConn, $ldapAdminRdn, $ldapAdminPassword)) {
echo "<p style='color: red;'>Hata: Yönetici ile bağlantı başarısız.</p>";
echo "<p style='color: red;'>LDAP Hatası: " . ldap_error($ldapConn) . "</p>";
ldap_unbind($ldapConn); // Bağlantıyı kapat
die();
}
echo "<p style='color: green;'>Yönetici ile başarılı bağlantı sağlandı.</p>";
// 3. Kullanıcıyı Ara
echo "<p>Arama tabanı DN '{$searchBase}' içinde, filtre '{$searchFilter}' ile kullanıcı aranıyor...</p>";
$searchResult = ldap_search($ldapConn, $searchBase, $searchFilter);
if (!$searchResult) {
echo "<p style='color: red;'>Hata: LDAP araması başarısız oldu.</p>";
echo "<p style='color: red;'>LDAP Hatası: " . ldap_error($ldapConn) . "</p>";
ldap_unbind($ldapConn); // Bağlantıyı kapat
die();
}
echo "<p style='color: green;'>Arama başarılı.</p>";
// 4. Arama sonucunu al
$entries = ldap_get_entries($ldapConn, $searchResult);
if ($entries["count"] > 0) {
echo "<p>{$entries["count"]} adet eşleşen kayıt bulundu.</p>";
// Yalnızca ilk eşleşen kullanıcıya odaklanıyoruz
$userDn = $entries[0]["dn"];
echo "<p>İlk bulunan kullanıcının DN'si: <strong>{$userDn}</strong></p>";
// 5. Bulunan kullanıcı DN ve şifreyle kimlik doğrulama deneniyor
echo "<p>Kullanıcı DN '{$userDn}' ile kimlik doğrulama deneniyor...</p>";
// Not: burada kullanıcının kimlik doğrulaması yapılır; yönetici değil!
if (@ldap_bind($ldapConn, $userDn, $userPasswordToAuthenticate)) {
echo "<p style='color: green;'>Kullanıcı kimlik doğrulaması başarılı!</p>";
} else {
echo "<p style='color: red;'>Kullanıcı kimlik doğrulaması başarısız.</p>";
echo "<p style='color: red;'>LDAP Hatası: " . ldap_error($ldapConn) . "</p>";
}
} else {
echo "<p>'{$searchFilter}' filtresiyle eşleşen kullanıcı bulunamadı.</p>";
}
// 6. LDAP bağlantısını kapat
echo "<p>LDAP bağlantısı kapatılıyor...</p>";
ldap_unbind($ldapConn);
echo "<p style='color: green;'>Bağlantı kapatıldı.</p>";
?>
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
Kodu Açıklama
- Bağlantı (
ldap_connect
): LDAP sunucusuna bağlantı kurulmasını sağlar ve bağlantı nesnesi döndürür. - Seçenek Ayarı (
ldap_set_option
): Bağlantı üzerinde gerekli davranışların ayarlanmasını sağlar.LDAP_OPT_PROTOCOL_VERSION, 3
ile LDAPv3 protokolünü kullanılması (tavsiye edilir).LDAP_OPT_REFERRALS, 0
ile referrals kapatılır (çoğu basit uygulamada gerekmez). - Bind (
ldap_bind
): LDAP sunucusunda kimlik doğrulama işlemi yapar.- Anonim bind:
ldap_bind($ldapConn)
– Kullanıcı adı ve şifre olmadan, genellikle kısıtlı yetkilerle. - Doğrulamalı bind:
ldap_bind($ldapConn, $dn, $password)
– Belirtilen DN ve şifreyle kimlik doğrulama yapılır. Örnekte önce yöneticiyle bağlanılıp arama yapılmakta, sonra bulunan kullanıcı DN’siyle kullanıcı doğrulama denenmektedir.
- Anonim bind:
- Arama (
ldap_search
): Belirtilen arama tabanı DN’si (searchBase
) altında, filtre ile kayıt araması yapar. - Kayıtları Alma (
ldap_get_entries
): Arama sonucunda eşleşen tüm kayıtları dizi olarak döndürür. - Bağlantıyı Sonlandırma (
ldap_unbind
): LDAP bağlantısını güvenli şekilde kapatır, kaynakları serbest bırakır.
Dikkat Edilmesi Gerekenler
- LDAP Sunucu Gereksinimi: Bu döküman ve örnek yalnızca PHP’de OpenLDAP istemci eklentisinin kullanımını anlatır. Bağlanabileceğiniz bir LDAP sunucunuzun olması gerekir. Bu, ServBay’den bağımsız olarak kurulan yerel bir OpenLDAP sunucusu veya kurumsal ortamlarda kullanılan uzaktaki bir LDAP/Active Directory sunucusu olabilir.
- Güvenlik: Üretim ortamında LDAP kimlik bilgilerini işlerken güvenlik en iyi uygulamalarına uyun. Örneğin, çevre değişkenleri veya güvenli yapılandırma dosyaları kullanın ve mümkünse şifrelenmiş bağlantılar için LDAPS’i (SSL/TLS üzerinden LDAP, genellikle 636 portu) tercih edin. Şifrelenmemiş LDAP (port 389) üretimde önerilmez.
- Hata Yönetimi: Örnek kodda temel hata yönetimi bulunmaktadır. Gerçek uygulamalarda daha gelişmiş hata yakalama ve günlükleme sistemleri geliştirmeniz önerilir.
- DN Formatı: DN (Distinguished Name) formatı oldukça katı ve hassastır. Sunucu yapılandırmanız ile tam uyumlu DN kullanmaya dikkat edin.
Sıkça Sorulan Sorular (SSS)
S: phpinfo()
sayfasında ldap
bölümü görülmüyor veya devre dışı, ne yapmalıyım?
C: ServBay'de PHP OpenLDAP eklentisi genellikle varsayılan olarak etkindir. Bu sorunla karşılaşırsanız, doğru PHP sürümünün phpinfo()
çıktısını incelediğinizden emin olun. Hala görünmüyorsa, ServBay’in ilgili PHP paketini yeniden yüklemeyi deneyebilir veya ServBay destek ekibiyle iletişime geçebilirsiniz.
S: PHP kodumda Call to undefined function ldap_connect()
hatası alıyorum.
C: Bu mesaj, PHP OpenLDAP eklentisinin yüklü veya etkin olmadığını belirtir. Bir önceki başlıktaki phpinfo()
adımıyla eklentinin durumunu kontrol ediniz.
S: Eklentiyi etkinleştirdim ama bağlantı ya da bind hata veriyor, LDAP hatası görünüyor.
C: Bağlantı ayarlarınızı (sunucu adresi, port) ve kimlik doğrulama bilgilerinizi (DN, şifre) dikkatlice kontrol edin. LDAP hata mesajları (örn. ldap_error()
ile alınan) sorunun nedenini belirtir; ör: "Invalid credentials" (Geçersiz kimlik bilgileri) veya "Can't contact LDAP server" (LDAP sunucusuna bağlanılamadı). LDAP sunucusunun çalışır durumda ve ağdaki erişime açık olduğundan emin olun.
Sonuç
ServBay, PHP'nin OpenLDAP eklentisini kolayca yükleyip kullanmanın pratik bir yolunu sunar. Basit doğrulama adımlarıyla, PHP ortamınızın LDAP sunucularıyla iletişim kurmaya uygun olup olmadığını kolayca kontrol edebilirsiniz. PHP'nin güçlü LDAP fonksiyonlarıyla, ServBay ile geliştirdiğiniz yerel web uygulamalarınıza kullanıcı kimlik doğrulama ve dizin sorgulama gibi işlevleri rahatlıkla entegre edebilir; uygulama alanınızı büyük ölçüde geliştirebilirsiniz.