LDAP
Questa sezione descrive il meccanismo di autenticazione LDAP in Sync-in.
La configurazione si trova nel file environment.yaml; consultare la sezione LDAP.
Flusso di autenticazione
Il flusso LDAP è il seguente:
- L'utente inserisce il proprio identificativo (login o e-mail) e la password.
- Gli account ospite e le credenziali applicative (password per applicazioni) vengono sempre convalidati tramite l'autenticazione locale.
- Sync-in prepara l'identificativo LDAP (UPN o
DOMAIN\userper Active Directory) e tenta un bind. - Sync-in legge la voce LDAP autenticata (DN esatto per il bind diretto LDAP generico, ricerca nel sottoalbero per il bind con account di servizio e Active Directory) e i relativi attributi obbligatori.
- Se l'autenticazione è valida, Sync-in sincronizza l'account locale o lo crea, se necessario.
- Il ruolo di amministratore può essere assegnato tramite un gruppo LDAP.
- Se LDAP non è disponibile, può essere consentito un fallback locale per gli amministratori e, facoltativamente, per gli utenti standard (consultare Break-glass).
Configurazione
Esempio minimo:
auth:
provider: ldap
ldap:
servers: ['ldap://localhost:389']
baseDN: 'ou=people,dc=ldap,dc=sync-in,dc=com'
attributes:
login: uid
email: mail
Attributi e normalizzazione
Nella voce LDAP devono essere presenti i seguenti attributi:
attributes.login: utilizzato per il login locale.attributes.email: utilizzato per l'indirizzo e-mail locale.
attributes.storageQuota è facoltativo e il suo valore predefinito è storageQuota. Quando è presente, viene interpretato come una quota in byte e
sincronizzato con l'account locale. Un valore non valido lascia invariata la quota locale. Un valore assente o pari a 0 imposta uno spazio di
archiviazione illimitato.
Il login locale viene normalizzato: se l'identificativo è fornito nel formato DOMAIN\user, localmente viene memorizzato solo user.
Il campo memberOf viene normalizzato in un elenco di valori e CN, consentendo così le verifiche di appartenenza ai gruppi.
Se options.adminGroup è impostato e memberOf non è sufficiente, Sync-in esegue una ricerca mirata di tipo groupOfNames per quel gruppo.
Account di servizio
Per impostazione predefinita, Sync-in tenta un bind diretto utilizzando le credenziali dell'utente.
È possibile configurare un account di servizio per eseguire le ricerche LDAP:
auth:
ldap:
serviceBindDN: 'cn=syncin,ou=services,dc=ldap,dc=sync-in,dc=com'
serviceBindPassword: 'LDAPServiceBindPasswordToChange'
Con un bind tramite account di servizio:
- Bind iniziale con l'account di servizio.
- Ricerca dell'utente in
baseDNcon il filtro specifico per il tipo di directory (+ ilfilterconfigurato). - Nuovo bind con il DN trovato e la password inserita.
Senza un bind tramite account di servizio:
- LDAP generico: Sync-in costruisce
<attributes.login>=<login>,<baseDN>, esegue l'escape del login come valore RDN LDAP, effettua il bind su tale DN, quindi legge esattamente quella voce con ambito base. - Active Directory: Sync-in effettua il bind con il login AD, quindi cerca la voce in
baseDN.
Per LDAP generico, il filter facoltativo configurato si applica anche alla lettura esatta. Se la lettura riesce senza restituire alcuna voce,
l'autenticazione termina. Se la directory rifiuta tale lettura con un errore noto di accesso o compatibilità, Sync-in esegue una ricerca controllata
nel sottoalbero utilizzando soltanto l'attributo attributes.login configurato (+ filter). La ricerca deve restituire esattamente un risultato
completo e non troncato contenente un DN; prima di utilizzarne gli attributi, Sync-in esegue nuovamente il bind su tale DN con la password inserita.
Questo percorso di compatibilità non viene utilizzato in caso di risultato vuoto o di errore tecnico non correlato.
Utilizzare un account di servizio quando il DN dell'utente non può essere costruito con questa formula o quando gli utenti non possono cercare gli attributi o i gruppi richiesti da Sync-in.
Specificità di Active Directory
Se attributes.login è impostato su sAMAccountName o userPrincipalName, Sync-in adatta il login:
userPrincipalName: è possibile aggiungere un suffisso tramiteupnSuffix(ad es.user@sync-in.com).sAMAccountName: è possibile aggiungere un prefisso tramitenetbiosName(ad es.SYNC_IN\user).
In questa modalità, il bind dell'utente viene eseguito direttamente con il login fornito (formato UPN o DOMAIN\user).
I filtri per le ricerche nel sottoalbero vengono adattati automaticamente:
- AD:
(sAMAccountName=...) OR (userPrincipalName=...) OR (mail=...) - LDAP generico con bind tramite account di servizio:
(uid=...) OR (cn=...) OR (mail=...)
Il normale percorso di bind diretto LDAP generico non utilizza questo filtro OR: legge direttamente il DN autenticato. La relativa ricerca di
compatibilità controllata verifica soltanto l'attributo attributes.login configurato, richiede un risultato univoco e non troncato e infine un
bind riuscito sul DN di tale risultato.
Ruoli di amministratore
Se options.adminGroup è impostato, Sync-in verifica l'appartenenza dell'utente al gruppo:
- tramite
memberOf, se presente; - altrimenti tramite una ricerca
groupOfNames(utile quandomemberOfnon è esposto).
Se l'utente non può eseguire la ricerca dei gruppi, utilizzare un account di servizio.
Se options.adminGroup non è impostato, gli account amministratore esistenti mantengono il proprio ruolo e non possono essere retrocessi tramite LDAP.
Break-glass (fallback locale)
Se LDAP non è disponibile (errore di connettività, servizio inattivo), Sync-in può consentire l'autenticazione locale tramite password:
- È sempre consentita per gli account amministratore (break-glass), anche in caso di errore dell'autenticazione LDAP.
- Per gli altri utenti è consentita solo se l'errore è dovuto all'indisponibilità di LDAP e se
options.enablePasswordAuthFallbackè abilitato.
Questo meccanismo garantisce la continuità dell'accesso amministrativo quando il servizio di directory non è disponibile.
Affinché il fallback sia utilizzabile, è consigliabile configurare e mantenere disponibile una password locale Sync-in per gli account amministratore.
Per gli utenti standard, questo fallback è disabilitato per impostazione predefinita.
Sincronizzazione degli account
Dopo un accesso riuscito:
- Se l'utente non esiste e
autoCreateUserè abilitato, Sync-in crea un account locale. - Il login locale viene ricavato da
attributes.login. - L'indirizzo e-mail viene ricavato da
attributes.email(obbligatorio). - I campi nome e cognome vengono ricavati da
givenName+sn, oppure dadisplayNameocn. - Le autorizzazioni iniziali provengono da
autoCreatePermissions. - La quota di archiviazione viene sincronizzata da
attributes.storageQuotaquando la voce LDAP fornisce un valore valido in byte. Un valore assente o pari a0imposta uno spazio di archiviazione illimitato.
Disponibilità ed errori
Le credenziali LDAP non valide causano il rifiuto dell'autenticazione.
Gli errori di connettività LDAP vengono considerati un'indisponibilità del servizio e possono attivare il fallback locale
(consultare Break-glass).
Gli account ospite e le credenziali applicative non utilizzano LDAP e vengono sempre convalidati tramite l'autenticazione locale.
Sicurezza
Si consiglia vivamente di utilizzare LDAPS (ldaps://) o StartTLS per proteggere le credenziali trasmesse durante il bind LDAP.