Kategorie: Programowanie

LDAP – zarys tematu [Java]

Cześć! Cieszę się, że mnie odwiedziłeś/aś. Zanim przejdziesz do artykułu chciałbym zwrocić Ci uwagę na to, że ten artykuł był pisany kilka lat temu (2013-09-12) miej więc proszę na uwadzę że rozwiązania i przemyślenia które tu znajdziesz nie muszą być aktualne. Niemniej jednak zachęcam do przeczytania.

Cześć! Kilka dni temu było mi miło poznać pewną ważną osobistość w świecie baz danych, usług katalogowych i szeroko pojętego gromadzenia informacji… A mowa oczywiście o LDAPie.
Czym jest LDAP? W skrócie jest to nieco inna baza danych.. Określana jako „lekka”, co w tym znaczeniu jest nie tyle szybkością (której w sumie LDAPowi nie brakuje), ile prostotą działania. Akronim po rozwinięciu to „Lighweight Directory Access Protocol”.

Czym różni się ona od standardowych baz SQL? Ano chociażby adresowaniem rekordów. W chociażby MySqlu, czy MsSql’u – rekordy posiadają unikalne pole, dzięki któremu możemy się do nich dobrać. Tzw. Primary Key. Często jest to również pole odpowiadające za numerację rekordów (auto increment).
W LDAPie jest nieco inaczej. Coś takiego jak Primary Key nie istnieje. Są za to jego odpowiedniki, które działają nieco inaczej. Jednym z nich jest DN czyli „distinguished name” – ścieżka, która wyróżnia rekord. Dzięki niej można się odwołać się do konkretnego rekordu. Alternatywą dla DN jest RDN – czyli relative DN, co w sumie jest tym samym, tylko że relatywnym (odnoszącym się do elementu nadrzędnego).

Przykładowa ścieżka:
„cn=mmazur,dc=eu,dc=org”

Jak widać ścieżka to zbiór elementów typu „klucz=wartość”, gdzie:
cn – to nazwa rekordu. Common name.
dc – directory context. Czyli dalsza część członu.
ou – organizational unit.

Natomiast sama końcówka to base distingushed name (BDN). U nas to „dc=mmazur,dc=eu,dc=org”.

Cały LDAP jest tak naprawdę implementacja struktury drzewiastej. Machnąłem (inaczej nie da się tego nazwać) mały szkic jak mogłaby by wyglądać struktura usługi katalogowej LDAP, gdyby chodziło o domenę http://mmazur.eu.org :

Jest to tylko przykład. Kontener (rożne są nazewnictwa, może to być również poddrzewem) cn=”mmazur” ma swoje atrybuty. Tutaj są to np DNS, właściciel itp. Do atrybutów możemy się odwołać poprzez ścieżkę RDN/DN. Ważną właściwością jest to, że struktura każdego rekordu może być inna – co nie jest możliwe w przypadku SQLa, tam każdy rekord ma z góry ustaloną strukturę (narzuconą przez strukturę tabeli).

Co ma do LDAP’a Java? Ano przyszło mi się zmierzyć z nim własnie w Javie. Autoryzacja + wybranie jakiś atrybutów. Trywialnie brzmiące zadanie nie było takie trywialne dla osoby która pierwszy raz w życiu zaczyna poznawać LDAPa.

Dla przykładu opiszę trochę jak odbywa się poleceni bind() – czyli autoryzacja.
W Javie są chyba 4 biblioteki do LDAPa – ja używałem JNDI.
Sama autoryzacja wygląda tak:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Hashtable<String,String> env = new Hashtable<String,String>();
env.put( Context.INITIAL_CONTEXT_FACTORY , "com.sun.jndi.ldap.LdapCtxFactory" );
env.put( Context.SECURITY_AUTHENTICATION , "simple" );
env.put( Context.PROVIDER_URL , "ldap://127.0.0.1:389/" );
//port default - 389 lub 636.
env.put( Context.SECURITY_PRINCIPAL , "cn=mmazur,dc=eu,dc=org" );

env.put( Context.SECURITY_CREDENTIALS , "veryStrongPassword");

try
{
ctx = new InitialLdapContext( env, null );
//ctx od context ;) jesli nie walneło wyjątkkiem - autoryzacja się powiodła.
)

catch( NamingException ex )
{
//if auth failed.
}

Tworzymy na początku środowisko pracy w formie HashTablicy, typu klucz-wartość, uzupełniając tym samym dane potrzebne do autoryzacji. Podajemy typ autoryzacji, położenie serwera, port, ścieżkę i hasło. Jeśli uda się stworzyć kontekst środowiska, to znaczy że autoryzacja przebiegła bezproblemowo. Jeśli nie, dostaniemy wyjątek z Message typu „You don’t have permission.”

Dzięki za wizytę,
Mateusz Mazurek
Tagi: ldap
Mateusz M.

Pokaż komentarze

Ostatnie wpisy

Podsumowanie: luty i marzec 2024

Ostatnio tygodnie były tak bardzo wypełnione, że nie udało mi się napisać nawet krótkiego podsumowanie. Więc dziś zbiorczo podsumuję luty… Read More

4 tygodnie ago

Podsumowanie: styczeń 2024

Zapraszam na krótkie podsumowanie miesiąca. Książki W styczniu przeczytałem "Homo Deus: Historia jutra". Książka łudząco podoba do wcześniejszej książki tego… Read More

3 miesiące ago

Podsumowanie roku 2023

Cześć! Zapraszam na podsumowanie roku 2023. Książki Zacznijmy od książek. W tym roku cel 35 książek nie został osiągnięty. Niemniej… Read More

4 miesiące ago

Podsumowanie: grudzień 2023

Zapraszam na krótkie podsumowanie miesiąca. Książki W grudniu skończyłem czytać Mein Kampf. Nudna książka. Ciekawsze fragmenty można by było streścić… Read More

4 miesiące ago

Praca zdalna – co z nią dalej?

Cześć, ostatnio w Internecie pojawiło się dużo artykułów, które nie były przychylne pracy zdalnej. Z drugiej strony większość komentarzy pod… Read More

4 miesiące ago

Podsumowanie: listopad 2023

Zapraszam na krótkie podsumowanie miesiąca. Książki W listopadzie dokończyłem cykl "Z mgły zrodzony" Sandersona. Tylko "Stop prawa" mi nie do… Read More

5 miesięcy ago