Vai al contenuto principale

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:

  1. 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.
  2. Sync-in prepara l'identificativo LDAP (UPN o DOMAIN\user per Active Directory) e tenta un bind.
  3. 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.
  4. Se l'autenticazione è valida, Sync-in sincronizza l'account locale o lo crea, se necessario.
  5. Il ruolo di amministratore può essere assegnato tramite un gruppo LDAP.
  6. 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 baseDN con il filtro specifico per il tipo di directory (+ il filter configurato).
  • 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 tramite upnSuffix (ad es. user@sync-in.com).
  • sAMAccountName: è possibile aggiungere un prefisso tramite netbiosName (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 quando memberOf non è 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 da displayName o cn.
  • Le autorizzazioni iniziali provengono da autoCreatePermissions.
  • La quota di archiviazione viene sincronizzata da attributes.storageQuota quando la voce LDAP fornisce un valore valido in byte. Un valore assente o pari a 0 imposta 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.