LDAP, bir LDAP istemcisi ve bir LDAP sunucusu arasında değiştirilen mesajların içeriğini tanımlar. Mesajlar, istemcinin istediği işlemleri (arama, değiştirme ve silme), sunucudan gelen yanıtları ve mesajlarda yer alan verilerin biçimini belirtir. LDAP mesajları TCP/IP, bağlantı yönelimli bir protokol yoluyla iletilir, böylece istemci ve sunucu arasındaki bir oturumu kurmak ve bağlantısını kesmek için de işlemler vardır.
Bununla birlikte, bir LDAP dizininin tasarımcısı için, kablo aracılığıyla gönderilen ve alınan mesajların yapısı ilginç olmayacaktır. Önemli olan, bu mesajlar ve veri türleri tarafından tanımlanan mantıksal model, dizinin nasıl organize edildiğini, hangi işlemlerin mümkün olduğunu, bilgilerin nasıl korunduğu gibi konulardır.
Bir LDAP istemcisi ve bir LDAP sunucusu arasındaki genel etkileşim, aşağıdaki şekilde olur:
1. İstemci bir LDAP sunucusuyla bir oturum kurar. Bu sunucuya binding olarak bilinir. İstemci, LDAP sunucusunun dinlediği ana bilgisayar adını veya IP adresini ve TCP/IP bağlantı noktası numarasını belirtir.
2. İstemci, sunucuyla uygun şekilde kimlik doğrulaması için bir kullanıcı adı ve şifre sağlayabilir veya önceden tanımlanmış erişim hakları ile anonim bir oturum kurabilir. İstemci ve sunucu, veri şifreleme gibi daha güçlü güvenlik yöntemleri kullanan bir oturum da kurabilir.
3. LDAP okuma ve güncelleme yetenekleri sunarak, adres defteri bilgilerini yönetmenizi ve verileri sorgulamanızı sağlar. LDAP ayrıca, kullanıcı tarafından belirtilen keyfi kriterleri karşılayan veriler için dizin aramayı da destekler. LDAP için araştırma (searching) en çok kullanılan işlemdir. Kullanıcı, dizinin hangi kısmının aranacağını ve hangi bilgilerin döndüğünü belirtebilir. Boolean koşullarını kullanan bir arama filtresi, hangi dizin verilerinin aramayla eşleştiğini belirtir.
4. İstemci istekte bulunmayı bitirdiğinde, oturumu sunucuyla kapatın. Bu da unbinding olarak bilinir.
LDAP API'sinin felsefesi işleri basit tutmaktır. Bu, var olan uygulamalara dizin desteği eklenmesi düşük bir ek yük ile yapılabileceği anlamına gelir. LDAP orijinal olarak X.500 dizinlerine erişmek için DAP'a hafif bir alternatif olarak tasarlandığından, bir X.500 modeli izler. Dizin, entries olarak bilinen veri yapılarını depolar ve düzenler. Bir dizin girdisi genellikle kişi, cihaz, konum ve benzeri gibi bir nesneyi tanımlar.
Her bir giriş (entry), benzersiz bir şekilde tanımlayan ayırt edici ad distinguished name (DN) denilen bir ada sahiptir. DN, bir dosyanın adı UNIX® ve Windows gibi birçok işletim sistemindeki bir dizin adı yolundan oluştuğu gibi, RDN'ler (göreli ayırt edici isimler) adı verilen bir dizi parçadan oluşur. Girişler, farklı isimlerine dayalı olarak hiyerarşik bir ağaç yapısında düzenlenebilir. Bu dizin ağacına dizin bilgi ağacı (DIT) denir. Her bir giriş, girişi açıklayan bir veya daha fazla özellik içerir. Her attribute-öznitelik bir tür ve bir değere sahiptir. Örneğin, bir kişinin telefon defteri girdisi telefon numarası olarak adlandırılan bir özelliğe sahip olabilir. PhoneNumber özniteliğinin sözdizimi, bir telefon numarasının boşluk ve çizgi içeren bir sayı dizisi olması gerektiğini belirtir. Özniteliğin değeri kişinin telefon numarası olabilir, örneğin 216-551-4747.
Bir dizi girişi bazı nesneleri tanımlar. Nesne sınıfı, belirli bir nesnenin açıklamasının tersine, bir nesnenin bazen bir şablonu olarak adlandırılan genel bir tanımlamadır. Örneğin, nesne sınıfındaki kişinin bir soyadı özniteliği vardır, John Smith'i tanımlayan nesne ise Smith değeriyle bir soyadı özniteliğine sahiptir.
Bir dizin sunucusunun saklayabileceği nesnelerin sınıfları ve içerdikleri nitelikler şema tarafından açıklanır. Şemalar dizinde hangi nesne sınıflarına izin verildiğini, hangi niteliklerin içermesi gerektiğini, hangi özniteliklerin isteğe bağlı olduğunu ve her özelliğin sözdizimini tanımlar. Örneğin, bir şema bir kişisel nesneler sınıfı tanımlayabilir. Kişinin şeması, bir kişinin bir karakter dizisi olan bir soyadı özniteliğine sahip olmasını gerektirebilir, bir kişinin girişinin boşluk ve çizgi içeren bir sayı dizisi olan bir telefon numarası özniteliğine sahip olabileceğini ve bunun gibi bir şeyi belirtebilir.
LDAP, dizin girdilerine erişim ve düzenleme işlemlerini tanımlar, örneğin:
• Binding ve unbinding,
• Kullanıcı tarafından belirtilen ölçütleri karşılayan öğeleri bulma,
• Girdi ekleme,
• Girdi silme,
• Bir girdiyi düzenleme, bir girdinin distinguished veya relative distinguished adının değiştirilmesi (move),
• Girdinin karşılaştırılması
Bugün tüm modern dizin sunucularının LDAP sürümü LDAPv3'tür. LDAPv3, birkaç IETF RFC'de belgelenmiştir. LDAP'nin 3. sürümünün ana RFC'leri ve LDAP mimarisini tanımlayan belgelere genel bakış sağlamak için aşağıda kısa bir açıklamalar bulunmaktadır
RFC 2251 Lightweight Directory Access Protocol (v3)
X.500 modelini destekleyen dizinlere hafif yükte erişim sağlamak için tasarlanmış LDAP protokolünü açıklar. Hafif protokol, tarayıcılar ve küçük masaüstü sistemleri gibi sınırlı kaynaklara sahip olan ortamlarda kullanılmak üzere tasarlanmıştır. Bu RFC, LDAP ile ilgili RFC ailesinin kalbidir.
Girdilerin distinguished isimler ile nasıl adlandırıldığını açıklar, istemci ve sunucu arasında değiştirilen mesajların biçimini tanımlar, istemci tarafından gerçekleştirilebilecek işlemleri listeler ve verilerin UTF-8 karakterli kodlama kullanılarak temsil edildiğini belirtir. RFC, dizin girişlerini tanımlayan şemanın okunabilmesi gerektiğini, böylece istemcinin bir dizin sunucusunun hangi nesne türlerini depolayabileceğini belirleyeceğini belirtir.
Bir sunucu istenen bilgileri içermiyorsa, istemcinin başka bir LDAP sunucusuna nasıl başvurabileceğini tanımlar. Komutları kullanarak bireysel işlemlerin nasıl genişletilebileceğini ve ek işlemler kullanılarak ek işlemlerin nasıl tanımlanabileceğini açıklar. Ayrıca, müşterilerin sunuculara kendilerini nasıl kimlik doğrulaması ve isteğe bağlı olarak ek kimlik doğrulama mekanizmalarına izin vermek için SASL (Basit Kimlik Doğrulama ve Güvenlik Katmanı) özelliklerini nasıl kullanacakları anlatılmaktadır.
RFC 2252 Lightweight Directory Access Protocol (v3): Attribute Syntax Definitions
LDAP, iletilecek özniteliklerin değerlerini temsil etmek için sekizli dizeleri kullanır. LDAP protokolünde. Bu RFC, tamsayılar, zaman damgaları, posta adresleri ve benzeri değerleri tanımlar. Bu RFC, tam sayılar, zaman damgaları, posta adresleri ve benzeri değerlerin nasıl temsil edildiğini tanımlar. Örneğin, 123 tamsayısı "123" dizesi ile temsil edilir. Bu tanımlara öznitelik sözdizimleri denir. Bu RFC, “telefon numarası” gibi bir sözdizimiyle özniteliğin nasıl kodlandığını açıklar ve arama ölçütlerini karşılayıp karşılamadıklarını belirlemek için uyuşma kurallarını tanımlar. caseIgnoreString örnek olarak, büyük/küçük harf önemli olmadığında karakter dizeleri karşılaştırmak için kullanılır.
Bu tür öznitelikler ve sözdizimi nesne sınıflarını açıklayan şemalar oluşturmak için kullanılır. Bir şema, adres dizin girdisinin sahip olduğu veya sahip olabileceği öznitelikleri listeler. Dizindeki her giriş, giriş açıklayan şemayı (bir veya daha fazla şema) listeleyen bir nesne sınıfı özniteliğine sahiptir. Örneğin, bir dizin girişi InetOrgPerson ve OrganizationalPerson nesne sınıfları tarafından açıklanabilir. Bir nesne sınıfı özniteliği içeriyorsa, EstensibileObject değeri, herhangi bir öznitelik içerebilir.
RFC 2253 Lightweight Directory Access Protocol (v3): UTF-8 String Representation of Distinguished Names
Ayırt edici isimler (DN'ler), dizin girdileri için bazen birincil anahtar olarak adlandırılan benzersiz tanımlayıcılarıdır. X. 500 DN kodlamak için ASN. 1 kullanır. LDAP DN’leri dizeler olarak kodlar. Bu RFC, DN’lerin dize olarak nasıl temsil edildiğini tanımlar. Dize gösterimi kodlamak ve çözmek kolaydır ve aynı zamanda okunabilir. Bir DN bir dizi göreceli ayırt edici adları (RDN) virgülle ayrılmış oluşur. Bir DN oluşturma RDN dizisinin sırasını bir dizin girdisinin öncüleri köküne adları. Her RDN adres defteri girdisinde bir öznitelik değeri oluşur.
Örneğin, DN CN = John Smith, OU = Austin, o = IBM, c = US
ABD (c) ülkesinde IBM Organization (s) içinde bulunan Austin kuruluş birimi (OU) altında ortak adı (CN) John Smith ile bir kişi için bir adres defteri girdisini temsil eder.
RFC 2254 The String Representation of LDAP Search Filters
LDAP arama filtreleri, belirli ölçütlerle eşleşen bir dizindeki girdileri aramak için güçlü bir mekanizma sağlar. LDAP protokolü, bir arama filtresinin ağ temsilini tanımlar. Bu belge, bir arama filtresinin okunabilir bir dizgi olarak nasıl temsil edileceğini tanımlar. Bu gösterim, arama ölçütlerini belirtmek için uygulamalar veya program kaynak kodunda kullanılabilir. Öznitelik değerleri, yaklaşık veya fonetik eşleştirme için ilişkisel işleçler kullanılarak eşit, büyük veya "benzer sesler" olarak karşılaştırılır. Boolean operatörleri daha karmaşık arama filtreleri oluşturmak için kullanılabilir. Örneğin, aşağıdaki arama filtresi, bir Smith soyadı özniteliğine sahip olan veya Jo ile başlayan ortak bir ad özelliğine sahip girdileri arar.
(| (sn=Smith) (cn=Jo*))
RFC 2255 The LDAP URL Format
Tekdüzen Kaynak Konum Belirleyicileri (URL'ler), İnternet'teki Web sayfalarını, dosyaları ve diğer kaynakları tanımlamak için kullanılır. Bir LDAP URL'si belirli bir LDAP sunucusunda gerçekleştirilecek bir LDAP araması belirtir. Bir LDAP URL'si, aramanın sonucu olarak döndürülen bilgileri, kompakt ve standart bir şekilde gösterir. LDAP URL formatı, daha sonra bu bölümde daha ayrıntılı olarak tartışılmaktadır.
RFC 2256 A Summary of the X.500(96) User Schema for use with LDAPv3
Genelde dizin istemcileri tarafından erişilen birçok şema ve öznitelik X.500 tarafından zaten tanımlanmıştır. Bu RFC, LDAP sunucularının tanıması gereken nitelik ve nesne sınıflarına genel bir bakış sağlar. Örneğin, cn (ortak ad), açıklama ve postaAdresi gibi özellikler tanımlanır. Ülke, organizasyonelUnit, groupOfNames ve applicationEntity gibi nesne sınıfları da tanımlanır.
Yukarıdaki RFC'ler, sürüm 3'ün temel LDAP belirtimidir. LDAP, temel aldığı dört model (bilgi, adlandırma, işlevsel, güvenlik) incelenerek daha iyi anlaşılabilir:
Bilgi: Bir LDAP dizininde depolanan bilgilerin yapısını açıklar.
Adlandırma: Bilgilerin bir LDAP dizininde nasıl organize edildiğini ve tanımlandığını açıklar.
İşlevsel: Bir LDAP dizininde depolanan bilgiler üzerinde gerçekleştirilebilen işlemleri açıklar.
Güvenlik: bir LDAP dizinindeki bilgilerin yetkisiz erişimden nasıl korunabileceğini açıklar.