L’autenticazione utente LDAP spiegata | Connect2id

L’autenticazione utente LDAP è il processo di convalida di una combinazione di nome utente e password con un server di directory come MS Active Directory, OpenLDAP o OpenDJ. Le directory LDAP sono una tecnologia standard per immagazzinare informazioni su utenti, gruppi e permessi e servirle alle applicazioni in azienda.

L’autenticazione degli utenti con una directory LDAP è un processo in due fasi. Questo articolo ne spiega i meccanismi e poi come configurarlo in LdapAuth.

Passo 1 – Risolvere il nome utente in un attributo della voce della directory

Le voci degli utenti in una directory sono identificate da un nome distinto (DN) che assomiglia a una struttura simile a un percorso che inizia dalla radice della directory (il segmento più a destra):

uid=alice,ou=people,dc=wonderland,dc=net

Per autenticare un utente con una directory LDAP è necessario prima ottenere il suo DN e la sua password.

Con un modulo di login, le persone tipicamente inseriscono un semplice identificatore come il loro nome utente o indirizzo email. Non ci si aspetta che memorizzino il DN della loro voce nella directory. Sarebbe poco pratico.

Per risolvere questo problema entra in gioco la risoluzione DN. Prende il nome dell’utente o l’email, poi esegue una ricerca tra gli attributi del nome o dell’email di tutte le directory utente per trovare il DN corrispondente. Le directory impiegano un’indicizzazione e un caching molto efficienti, quindi queste ricerche sono tipicamente molto veloci.

Gli attributi della directory da cercare sono definiti nel parametro searchFilterconfiguration.La configurazione predefinita di LdapAuth cerca gli attributi UID e email. Il segnaposto%u viene sostituito con l’identificatore dell’utente inserito nel modulo di login:

ldapAuth.dnResolution.searchFilter = (|(uid=%u)(mail=%u))

Se vuoi cercare solo l’UID il filtro di ricerca dovrebbe essere come questo:

ldapAuth.dnResolution.searchFilter = (uid=%u)

Se vuoi cercare UID, email e numero di dipendente, estendi il filtro a

ldapAuth.dnResolution.searchFilter = (|(uid=%u)(mail=%u)(employeeNumber=%u))

Due cose importanti da osservare quando si configura la risoluzione DN e si creano nuove voci utente nella directory:

  • Gli attributi – username, email, ecc – con cui gli utenti effettuano il login devono essere unici. Se si trova che due voci hanno lo stesso attributo identificativo, per esempio l’email, l’autenticazione sarà prontamente negata.

  • Assicuratevi che ogni utente che si aspetta di entrare abbia un attributo definito per l’attributo identificativo. Per esempio, se gli utenti devono effettuare il login con il loro indirizzo email, assicuratevi che tutti gli account abbiano un attributo email definito, altrimenti l’autenticazione fallirà.

L’API web LdapAuth non rivela nella risposta di autenticazione la causa del fallimento del login – se era un nome utente sbagliato, una password sbagliata, o entrambi. Per risolvere situazioni in cui un utente non è in grado di accedere nonostante abbia inserito un nome utente e una password corretti, controlla i log del servizio.

Se un login è stato rifiutato a causa di un nome utente errato, una linea come questa apparirà nel log:

2012-10-01 10:52:51,460 INFO – user.auth: username=tom authenticated=false message=Invalid username

Se il nome utente è stato risolto correttamente, ma la password era errata:

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

Se abbiamo risolto correttamente la voce DN della directory dell’utente, possiamo procedere al passo successivo – controllare la password.

Passo 2 – Convalida della password dell’utente

Le password sono controllate da un comando LDAP chiamato bind. Viene aperta una connessione al server delle directory, poi viene inviata una richiesta per autenticare la connessione come un particolare utente passando il suo DN di ingresso e la password:

DN: uid=alice,ou=people,dc=wonderland,dc=netpassword: secret

Se le credenziali sono corrette, il server delle directory restituisce successo. Altrimenti restituisce un errore LDAP Invalid credentials (codice 49).

Cose importanti da notare qui:

  • La password è controllata rispetto a un attributo nella voce dell’utente dedicato a questo scopo. Se state usando uno schema standard di directory, questo attributo è chiamato userPassword. In MS Active Directory il nome di questo attributo è unicodePwd. Assicurati che ogni utente che si aspetta di accedere abbia un attributo di password definito. Altrimenti l’autenticazione fallirà.

  • I valori delle password sono spesso in hash e possono essere ulteriormente protetti, per esempio rendendoli di sola scrittura. Pertanto una semplice lettura e confronto LDAP non funzionerà in questo caso. Il comando bind è sempre il metodo preferito.

  • Le password sono tipicamente case sensitive.

Ricorda ancora che i file di log sono tuoi amici. Registrano i dettagli di ogni tentativo di login e possono essere usati per una rapida risoluzione dei problemi quando l’autenticazione non funziona come previsto. Se hai bisogno di altro aiuto per configurare LdapAuth, mettiti in contatto con noi.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.