Uwierzytelnianie użytkownika LDAP jest procesem walidacji kombinacji nazwy użytkownika i hasła z serwerem katalogowym takim jak MS Active Directory, OpenLDAP lubOpenDJ. Katalogi LDAP są standardową technologią do przechowywania informacji o użytkownikach, grupach i uprawnieniach oraz dostarczania ich do aplikacji w przedsiębiorstwie.
Uwierzytelnianie użytkowników za pomocą katalogu LDAP jest procesem dwuetapowym. Ten artykuł wyjaśnia mechanikę tego procesu, a następnie jak skonfigurować go wLdapAuth.
Krok 1 – Przeliczanie nazwy użytkownika na atrybut wpisu do katalogu
Wpisy użytkowników w katalogu są identyfikowane przez nazwę wyróżnioną (DN), która przypomina ścieżkę zaczynającą się od korzenia katalogu (najbardziej prawy segment):
uid=alice,ou=people,dc=wonderland,dc=net
Aby uwierzytelnić użytkownika w katalogu LDAP, musisz najpierw uzyskać jego DN, jak również jego hasło.
W formularzu logowania ludzie zazwyczaj wpisują prosty identyfikator, taki jak ich nazwa użytkownika lub adres e-mail. Nie oczekujesz od nich, że zapamiętają DN swojego wpisu w katalogu. Byłoby to niepraktyczne.
Do rozwiązania tego problemu służy DN resolution. Bierze ona nazwę użytkownika lub jego adres e-mail, a następnie przeszukuje atrybuty nazwy lub adresu e-mail wszystkich katalogów użytkownika w celu znalezienia pasującego DN wpisu. Katalogi stosują bardzo wydajne indeksowanie i buforowanie, więc te wyszukiwania są zazwyczaj bardzo szybkie.
Atrybuty katalogu do przeszukiwania są zdefiniowane w parametrze searchFilterconfiguration.Domyślna konfiguracja LdapAuth przeszukuje atrybuty UID i email. The%u placeholder jest zastępowany identyfikatorem użytkownika wprowadzonym w loginform:
ldapAuth.dnResolution.searchFilter = (|(uid=%u)(mail=%u))
Jeśli chcesz wyszukiwać tylko UID, filtr wyszukiwania wyglądałby następująco:
ldapAuth.dnResolution.searchFilter = (uid=%u)
Jeśli chcesz wyszukać UID, email i numer pracownika, rozszerz filtr do
ldapAuth.dnResolution.searchFilter = (|(uid=%u)(mail=%u)(employeeNumber=%u))
Dwie ważne rzeczy, na które należy zwrócić uwagę podczas konfigurowania DNresolution i tworzenia nowych userentries w katalogu:
-
Atrybuty – nazwa użytkownika, email, itp – za pomocą których logują się użytkownicy muszą być unikalne. Jeśli okaże się, że dwa wpisy mają ten sam atrybut identyfikujący, np. email, uwierzytelnienie zostanie natychmiast odrzucone.
-
Upewnij się, że każdy użytkownik, który ma się zalogować, ma zdefiniowany atrybut identyfikujący. Na przykład, jeśli użytkownicy mają się logować za pomocą adresu e-mail, upewnij się, że wszystkie konta mają zdefiniowany atrybut e-mail. W przeciwnym razie uwierzytelnianie nie powiedzie się.
Webbook API LdapAuth nie ujawnia w odpowiedzi uwierzytelniania przyczyny niepowodzenia logowania – czy była to błędna nazwa użytkownika, błędne hasło, czy oba te czynniki. Aby rozwiązać problem w sytuacji, gdy użytkownik nie jest w stanie zalogować się pomimo podania poprawnej nazwy użytkownika i hasła, należy sprawdzić logi usługi.
Jeśli logowanie zostało odrzucone z powodu złej nazwy użytkownika, w dzienniku pojawi się następująca linia:
2012-10-01 10:52:51,460 INFO – user.auth: username=tom authenticated=false message=Invalid username
Jeśli nazwa użytkownika została poprawnie rozwiązana, ale hasło było złe:
2012-10-01 10:55:05,662 INFO – user.auth: username=alice DN=uid=alice,ou=people,dc=wonderland,dc=net authenticated=false message=Invalid password
Jeśli poprawnie rozwiązaliśmy DN wpisu użytkownika do katalogu, możemy przejść do następnego kroku – sprawdzenia hasła.
Krok 2 – Sprawdzanie hasła użytkownika
Hasła są sprawdzane przez polecenie LDAP o nazwie bind. Otwierane jest połączenie z serwerem katalogowym, a następnie wysyłane jest żądanie uwierzytelnienia połączenia jako określonego użytkownika przez przekazanie jego DN wpisu i hasła:
DN: uid=alice,ou=people,dc=wonderland,dc=netpassword: secret
Jeśli dane uwierzytelniające są poprawne, serwer katalogowy zwraca sukces. W przeciwnym razie zwraca błąd LDAP Invalid credentials
(kod 49).
Ważne rzeczy, na które należy zwrócić uwagę:
-
Hasło jest sprawdzane względem atrybutu we wpisie użytkownika przeznaczonego do tego celu. Jeśli używasz standardowego schematu katalogów, atrybut ten nazywa się
userPassword
. W MS Active Directory nazwa tego atrybutu tounicodePwd
. Upewnij się, że każdy użytkownik, który ma się zalogować, ma zdefiniowany atrybut hasła. W przeciwnym razie uwierzytelnienie nie powiedzie się. -
Wartości haseł są często haszowane i mogą być dodatkowo chronione, np. przez uczynienie ich tylko do zapisu. Dlatego zwykły odczyt i porównanie LDAP z reguły nie działa w tym przypadku. Polecenie bind jest zawsze preferowaną metodą.
-
Hasła są zazwyczaj wrażliwe na wielkość liter.
Ponownie, pamiętaj, że pliki logów są twoim przyjacielem. Zapisują one szczegóły każdej próby zalogowania i mogą być użyte do szybkiego rozwiązywania problemów, gdy uwierzytelnianie nie działa zgodnie z oczekiwaniami. Jeśli potrzebujesz więcej pomocy przy konfiguracji LdapAuthget skontaktuj się z nami.