Uwierzytelnianie użytkownika LDAP wyjaśnione | Connect2id

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 to unicodePwd. 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.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.