Ověřování uživatelů LDAP je proces ověřování kombinace uživatelského jména a hesla s adresářovým serverem, například MS Active Directory, OpenLDAP neboOpenDJ. Adresáře LDAP jsou standardnítechnologií pro ukládání informací o uživatelích, skupinách a oprávněních a jejich poskytování aplikacím v podniku.
Ověřování uživatelů pomocí adresáře LDAP je dvoustupňový proces. Tento článekvysvětluje jeho mechaniku a poté jak jej nakonfigurovat vLdapAuth.
Krok 1 – Převedení uživatelského jména na atribut položky adresáře
Záznamy uživatelů v adresáři jsou identifikovány rozlišujícím jménem (DN), kterépřipomíná strukturu podobnou cestě začínající u kořene adresáře (nejpravějšísegment):
uid=alice,ou=people,dc=wonderland,dc=net
Pro ověření uživatele pomocí adresáře LDAP je nejprve třeba získatjeho DN a také heslo.
Při použití přihlašovacího formuláře lidé obvykle zadávají jednoduchý identifikátor, jako je jejichjméno nebo e-mailová adresa. Neočekáváte, že si budou pamatovat DN svého záznamu v adresáři. To by bylo nepraktické.
Pro řešení tohoto problému přichází na řadu řešení DN. Vezme jméno uživatele nebo e-mail a pak provede vyhledávání podle atributů jména nebo e-mailu všech uživatelských záznamů, aby našel odpovídající DN položky. Adresáře používají vysoce efektivní indexování a ukládání do mezipaměti, takže tato vyhledávání jsou obvykle velmi rychlá.
Atributy adresáře, které se mají vyhledávat, jsou definovány v parametru searchFilterconfiguration.
Výchozí konfigurace LdapAuth prohledává atributy UID a e-mail. Zástupný znak%u je nahrazen identifikátorem uživatele zadaným v přihlašovacím formuláři:
ldapAuth.dnResolution.searchFilter = (|(uid=%u)(mail=%u))
Pokud chcete vyhledávat pouze UID, vyhledávací filtr by vypadal takto:
ldapAuth.dnResolution.searchFilter = (uid=%u)
Pokud chcete vyhledávat UID, e-mail a číslo zaměstnance, rozšiřte filtr na
ldapAuth.dnResolution.searchFilter = (|(uid=%u)(mail=%u)(employeeNumber=%u))
Dvě důležité věci, které je třeba dodržet při konfiguraci řešení DN a vytváření nových uživatelských záznamů v adresáři:
-
Atributy – uživatelské jméno, e-mail atd. – kterými se uživatelé přihlašují, musí býtjedinečné. Pokud se zjistí, že dva záznamy mají stejný identifikační atribut,např. e-mail, bude autentizace okamžitě zamítnuta.
-
Ujistěte se, že každý uživatel, který se má přihlásit, má definovaný atribut pro identifikační atribut. Pokud se například uživatelé budou přihlašovat pomocí své e-mailové adresy, ujistěte se, že všechny účty mají definovaný atribut e-mail. jinak autentizace selže.
Ve webovém rozhraní API LdapAuth není v odpovědi na autentizaci odhalena příčina selhání přihlášení – zda to bylo špatné uživatelské jméno, špatné heslo nebo obojí. Chcete-li vyřešit situaci, kdy se uživatel nemůže přihlásitnavzdory zadání správného uživatelského jména a hesla, zkontrolujte protokoly služby.
Pokud bylo přihlášení odmítnuto z důvodu špatného uživatelského jména, objeví se v protokolu tento řádek:
2012-10-01 10:52:51,460 INFO – user.auth: username=tom authenticated=false message=Invalid username
Pokud bylo uživatelské jméno správně vyřešeno, ale heslo bylo špatné:
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
Pokud jsme správně vyřešili položku DN adresáře uživatele, můžeme přistoupit k dalšímu kroku – kontrole hesla.
Krok 2 – ověření hesla uživatele
Hesla se kontrolují příkazem LDAP zvaným bind. Je otevřeno spojení s adresářovým serverem a poté je odeslán požadavek na ověření spojení jako konkrétního uživatele předáním jeho vstupního DN a hesla:
DN: uid=alice,ou=people,dc=wonderland,dc=netpassword: secret
Jsou-li pověření správná, adresářový server vrátí úspěch. V opačném případě vrátí chybu LDAP Invalid credentials
(kód 49).
Důležité je zde poznamenat:
-
Heslo je kontrolováno proti atributu v položce uživatele určenémupro tento účel. Pokud používáte standardní adresářové schéma, nazývá se tento atribut
userPassword
. V MS Active Directory je název tohoto atributuunicodePwd
. Ujistěte se, že každý uživatel, který se má přihlásit, má definovaný atribut hesla. Jinak autentizace selže. -
Hodnoty hesla jsou často zaheslované a mohou být dodatečně chráněny, např. tím, že jsou určeny pouze pro zápis. Proto zde prosté čtení a porovnání LDAP zpravidla nebude fungovat. Příkaz bind je vždy preferovanou metodou.
-
Hesla jsou obvykle citlivá na velikost písmen.
Znovu připomínáme, že soubory protokolů jsou vaším přítelem. Zaznamenávají podrobnosti o každém pokusu o přihlášení a lze je použít k rychlému řešení problémů, když ověřování nefunguje podle očekávání. Pokud potřebujete další pomoc s konfigurací LdapAuth, obraťte se na nás.