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.”
Oj daaawnoo mnie tu nie było. Ale wakacje to był czas dużej liczby intensywnych wyjazdów i tak naprawdę, dopiero jakoś… Read More
Cześć! Zapraszam na krótkie podsumowanie kwietnia. Wyjazd do Niemiec A dokładniej pod granicę z Francją. Chrześnica miała pierwszą komunię. Po… Read More
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
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
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
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
Pokaż komentarze
Plus za fajny temat, minus za przykłady w Javie. :P
Dzięki wielkie za fragment kodu, mega przydatne ;)