LDAP (Lightweight Directory Access Protocol), bir dizin servisi protokolü türevidir. Dizin servisleri hiyararşik bir yapıda (dizin yapısında), veriye merkezi olarak ulaşılması için düşünülmüş bir bakıma veritabanı hizmeti veren sistemlerdir. Açık sistem olması dünya üzerinde global olarak erişilebilir bilgi kaynakları oluşturulabilmesini sağlar. Bunu yaparken coğrafi yapı (ülke, şehir), kurum içi organizasyon ve diğer özellikleri içeren hiyerarşik bir yapı kullanır.
Özellikle kurum içi organizasyon ve personelin kayıtlarının tutulabileceği elverişli bir ortam sunar. Bir kurumda çalışan veya bir üniversitede okuyan öğrencilere çeşitli servisler sunmanız gerekir. Bunun için her servisin üzerinde çalıştığı makinada ayrı ayrı kullanıcı hesapları açmanız gerekebilir. Böyle olunca sistemin ve kullanıcıların yönetimi zorlaşır. LDAP kullanarak bu sorun çözülebilir.
Kuruma giren personel için LDAP sunucusuna tek bir entry eklersiniz ve LDAP desteği veren servislerin bu sunucu üzerinden kullanıcı bilgilerine erişim ve doğrulama yapmalarını sağlayabilirsiniz.
PHP'de LDAP için iyi bir arabirim sunmaktadır. Bu sayede web uygulamalarınızda da LDAP kullanılabilmekte ve özellikle kullanıcılara kendilerine ait verileri güncelleyebilme olanağı sunuluyor.
LDAP Dizin Servisi:
LDAP dizinleme sisteminde her kayda ait özellikler (attributes) ve bu özelliklerin değerleri (values) vardır. Her kaydın ait olduğu bir nesne sınıfı (object class) vardır. Bu yapı sayesinde dünya üzerindeki her LDAP kaydı biricik olur. Bunun için DNS de olduğu gibi hiyerarşik bir isimlendirme kullanılmıştır. Kullanıcı bu biricikliğini DN (Distinguished Name) özelliğinden alır.
Örneğin dn='cn=Mustafa Hadi Dilek, o=Ulakbim, c=tr' benim Türkiye içinde, Ulakbim adlı kuruluşta, adı 'Mustafa Hadi Dilek' olan kişi olduğumu söyler ve biriciktir.
Örneğin bir kurumda çalışan personele ait bazı özellikler şunlar olabilir:object class=inetorgperson, entry'nin ait olduğu sınıf. Buradaki hiyerarşi top->person->orgperson->inetorgperson şeklinde düşünülebilir,
uid=hadi (UserID/sistemdeki kullanıcı adı),
cn=Mustafa Hadi Dilek (CommonName/kullanıcının adı soyadı),
sn=Dilek (SurName/kullanıcının soyadı),
mail=hadi@ulakbim.gov.tr (kullanıcının e-mail adresi),
telephonenumber=2989365 (kullanıcının ofis telefonu),
Genellikle sistemde yeni bir kullanıcı açarken 'inetorgperson' sınıfı kullanılır.
PHP ile LDAP Kullanımı:
PHP ile LDAP'a erişim oldukça kolaydır. İzlenmesi gereken sıra:
LDAP sunucusuna bağlanma (connect)
ldap_connect fonksiyonu ile LDAP sunucusuna soket bağlantısı açılır ve bir bağlantı numarası(link identifier) alınır.
LDAP sunucusuna belirli bir noktadan erişim için doğrulama (bind)
ldap_bind fonksiyonu ile sunucu veritabanında tanımlı bir kullanıcı olarak bağlantı kurulur. Bundan sonra kullanıcının sahip olduğu haklar ile sınırlanmış işlemler yapılabilir. Kullanıcı, dn özelliği ile belirtilir. Eğer dn ve password alanları girilmez ise bağlantı anonymous olarak gerçekleşir.
LDAP arama ve değiştirme türü işlevleri kullanma
ldap_search fonksiyonu ile verilen kriterlere (filter) göre arama yapılır. Sonuçlar bir sonuç numarası (result identifier) alınır.
ldap_modify fonksiyonu ile verilen verilen entry, yeni entry ile geğiştirilir. Girilen yeni entry çok boyutlu bir dizi olmalıdır.
Elde edilen sonuçları kullanma
ldap_get_entries fonksiyonu ile verilen sonuç numarasının gösterdiği sonuçlar çok boyutlu diziye alınır.
LDAP sunucusu ile bağlantıyı kesme (close connect)
ldap_close fonksiyonu sunucu bağlantısını kapatır.
Örnekler:
Telefon Defteri. LDAP üzerinden personel kayıtlarını görme, arama ve değişiklik olanağı. Kaynak kod:
<?
$footer_links["rehber.php"] ="Ulakbim Telefon Rehberi";
CommonFooter($footer_links);
if (isset($empty)) echo "<SCRIPT>alert(\"Kullanıcı adı ve şifreyi girmelisiniz...\");</SCRIPT>\n";
if (isset($unauth)) echo "<SCRIPT>alert(\"Kullanıcı olarak tanımlanamadınız...\");</SCRIPT>\n";
if (isset($enablecookie)) echo "<SCRIPT>alert(\"Tarayıcınızda cookie'leri etkinleştirip tekrar deneyin\");</SCRIPT>\n";
?>
rehber.php - Arama ekranı içeren ana script
modify.php - Değişiklik formu üreten scripti
modify_res.php - Değişikliği uygulayıp sonuçları gösteren script