> ## Documentation Index
> Fetch the complete documentation index at: https://ayakaleaf-pro.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Autenticazione LDAP

<Info>
  Questa funzionalità è sviluppata da [yu-i-i/overleaf-cep](https://github.com/yu-i-i/overleaf-cep). Qui offriamo alcuni documenti per la tua configurazione.
</Info>

<Warning>
  Overleaf usa la libreria **passport-ldapauth**, che è relativamente datata, quindi la compatibilità LDAP non può essere pienamente garantita. Con alcuni provider di identità LDAP (ad esempio, [https://goauthentik.io/](https://goauthentik.io/)) possono verificarsi errori di accesso. Pertanto, se possibile, si consiglia di preferire i metodi OAuth/SAML. Per goauthentik, segui la guida [Passo dopo passo: goauthentik](/it/on-premises/configuration/overleaf-toolkit/authentication/ldap-authentication#passo-dopo-passo-goauthentik) più sotto, che è stata testata.
</Warning>

### Che cos'è LDAP

LDAP è un protocollo di autenticazione usato per la verifica dell'identità esterna. Overleaf Server Pro offre nell'interfaccia web un modulo di accesso LDAP dedicato, separato dal metodo di autenticazione standard. Quando un utente invia il proprio nome utente e la propria password LDAP, il backend di Overleaf verifica le credenziali sul server LDAP configurato, ad esempio `ldap://ldap:10389`.

<Frame caption="Un esempio di LDAP in Server Pro">
  <img src="https://mintcdn.com/ayakaleaf-pro/x9kfDjtWlyyhG_mR/images/on-premises/image-29.png?fit=max&auto=format&n=x9kfDjtWlyyhG_mR&q=85&s=f3ebcacecec45115cf9b1fa55eb1ba94" alt="" width="2804" height="2005" data-path="images/on-premises/image-29.png" />
</Frame>

### Configurazione

Internamente, l'LDAP di Overleaf usa la libreria [passport-ldapauth](https://github.com/vesse/passport-ldapauth). La maggior parte di queste opzioni di configurazione viene passata all'oggetto di configurazione `server`, usato per configurare `passport-ldapauth`. Se hai problemi a configurare LDAP, vale la pena leggere il README di `passport-ldapauth` per farti un'idea della configurazione che si aspetta.

La variabile d'ambiente `EXTERNAL_AUTH` è necessaria per abilitare il modulo di autenticazione LDAP. Questa variabile d'ambiente specifica quali metodi di autenticazione esterna sono attivati. Il valore di questa variabile è un elenco. Se l'elenco include `ldap`, l'autenticazione LDAP verrà attivata.

Ad esempio: `EXTERNAL_AUTH=ldap saml`

A differenza di Overleaf CEP, nella nostra edizione ayaka-notes limitiamo l'autenticazione LDAP a un metodo di autenticazione puro, disponibile all'indirizzo `http://your-overleaf.com/ldap/login`.

Quando si usano i metodi di autenticazione LDAP e un utente inserisce `username` e `password` nel modulo di accesso, si procede come segue:

1. Viene cercato un utente LDAP nella directory LDAP usando il filtro definito da `OVERLEAF_LDAP_SEARCH_FILTER` e l'utente viene autenticato.
2. Se l'autenticazione ha esito positivo, nel database degli utenti di Overleaf si cerca un utente con l'indirizzo email principale corrispondente all'indirizzo email dell'utente LDAP autenticato:
   * Se viene trovato un utente corrispondente, il campo `hashedPassword` di questo utente viene eliminato (se esiste). Ciò garantisce che in futuro l'utente possa accedere solo tramite autenticazione LDAP.
   * Se non viene trovato alcun utente corrispondente, viene creato un nuovo utente Overleaf usando l'email, il nome e il cognome recuperati dal server LDAP.

<Danger>
  Per gli utenti che accedono tramite LDAP, non memorizziamo (o rimuoviamo quelli esistenti) gli hash delle password nel database mongo di Overleaf.
</Danger>

#### Variabili d'ambiente

* `OVERLEAF_LDAP_URL` <strong>(obbligatoria)</strong>
  * URL del server LDAP.
    * Esempio: `ldaps://ldap.example.com:636` (LDAP su SSL)
    * Esempio: `ldap://ldap.example.com:389` (non cifrato o STARTTLS, se configurato).
* `OVERLEAF_LDAP_IDENTITY_SERVICE_NAME`
  * Nome visualizzato del servizio di identità LDAP, usato nella pagina di accesso.
  * Valore predefinito: `Log in with LDAP Provider`.
* `OVERLEAF_LDAP_EMAIL_ATT`
  * L'attributo email restituito dal server LDAP, predefinito `mail`. Ogni utente LDAP deve avere almeno un indirizzo email. Se vengono forniti più indirizzi, verrà usato solo il primo.
* `OVERLEAF_LDAP_FIRST_NAME_ATT`
  * Il nome della proprietà che contiene il nome dell'utente usato nell'applicazione, di solito `givenName`.
* `OVERLEAF_LDAP_LAST_NAME_ATT`
  * Il nome della proprietà che contiene il cognome dell'utente usato nell'applicazione, di solito `sn`.
* `OVERLEAF_LDAP_NAME_ATT`
  * Il nome della proprietà che contiene il nome completo dell'utente, di solito `cn`. Se una delle due variabili precedenti non è definita, il nome e/o il cognome dell'utente vengono estratti da questa variabile. Altrimenti non viene usata.
* `OVERLEAF_LDAP_PLACEHOLDER`
  * Il segnaposto per il modulo di accesso, predefinito `Username`.
* `OVERLEAF_LDAP_UPDATE_USER_DETAILS_ON_LOGIN`
  * Se impostata su `true`, aggiorna i campi `first_name` e `last_name` dell'utente LDAP all'accesso e disattiva il modulo dei dettagli utente nella pagina `/user/settings` per gli utenti LDAP. Altrimenti, i dettagli verranno recuperati solo al primo accesso.
* `OVERLEAF_LDAP_BIND_DN`
  * Il distinguished name dell'utente LDAP da usare per la connessione LDAP (questo utente deve poter cercare/elencare gli account sul server LDAP), ad es. `cn=ldap_reader,dc=example,dc=com`. Se non definito, viene usato il binding anonimo.
* `OVERLEAF_LDAP_BIND_CREDENTIALS`
  * Password per `OVERLEAF_LDAP_BIND_DN`.
* `OVERLEAF_LDAP_BIND_PROPERTY`
  * Proprietà dell'utente con cui effettuare il bind sul client, predefinita `dn`.
* `OVERLEAF_LDAP_SEARCH_BASE` <strong>(obbligatoria)</strong>
  * Il DN di base da cui cercare gli utenti. Ad es. `ou=people,dc=example,dc=com`.
* `OVERLEAF_LDAP_SEARCH_FILTER`
  * Filtro di ricerca LDAP con cui trovare un utente. Usa il letterale '\{\{username}}' per far interpolare il nome utente fornito nella ricerca LDAP.
    * Esempio: `(|(uid={{username}})(mail={{username}}))` (l'utente può accedere con l'email o con il nome di login).
    * Esempio: `(sAMAccountName={{username}})` (Active Directory).
* `OVERLEAF_LDAP_SEARCH_SCOPE`
  * L'ambito della ricerca può essere `base`, `one` o `sub` (predefinito).
* `OVERLEAF_LDAP_SEARCH_ATTRIBUTES`
  * Array JSON di attributi da recuperare dal server LDAP, ad es. `["uid", "mail", "givenName", "sn"]`. Per impostazione predefinita vengono recuperati tutti gli attributi.
* `OVERLEAF_LDAP_STARTTLS`
  * Se `true`, viene usato LDAP su TLS.
* `OVERLEAF_LDAP_TLS_OPTS_CA_PATH`
  * Percorso del file contenente il certificato CA usato per verificare il certificato SSL/TLS del server LDAP. Se ci sono più certificati, può essere un array JSON di percorsi ai certificati. I file devono essere accessibili al container Docker.
    * Esempio (un certificato): `/var/lib/overleaf/certs/ldap_ca_cert.pem`
    * Esempio (più certificati): `["/var/lib/overleaf/certs/ldap_ca_cert1.pem", "/var/lib/overleaf/certs/ldap_ca_cert2.pem"]`
* `OVERLEAF_LDAP_TLS_OPTS_REJECT_UNAUTH`
  * Se `true`, il certificato del server viene verificato rispetto all'elenco delle CA fornite.
* `OVERLEAF_LDAP_CACHE`
  * Se `true`, verranno memorizzate nella cache fino a 100 credenziali alla volta per 5 minuti.
* `OVERLEAF_LDAP_TIMEOUT`
  * Per quanto tempo il client deve lasciare attive le operazioni prima del timeout, in ms (predefinito: Infinity).
* `OVERLEAF_LDAP_CONNECT_TIMEOUT`
  * Per quanto tempo il client deve attendere prima del timeout sulle connessioni TCP, in ms (predefinito: valore predefinito del sistema operativo).
* `OVERLEAF_LDAP_IS_ADMIN_ATT` e `OVERLEAF_LDAP_IS_ADMIN_ATT_VALUE`
  * Quando entrambe le variabili d'ambiente sono impostate, il processo di accesso imposta `user.isAdmin = true` se il profilo LDAP contiene l'attributo specificato da `OVERLEAF_LDAP_IS_ADMIN_ATT` e il suo valore corrisponde a `OVERLEAF_LDAP_IS_ADMIN_ATT_VALUE` oppure è un array che contiene `OVERLEAF_LDAP_IS_ADMIN_ATT_VALUE`; altrimenti `user.isAdmin` viene impostato su `false`. Se una delle due variabili non è impostata, lo stato di amministratore viene impostato su `true` solo durante la creazione dell'utente amministratore nel Launchpad.

Le cinque variabili seguenti servono a configurare il modo in cui i contatti degli utenti vengono recuperati dal server LDAP.

* `OVERLEAF_LDAP_CONTACTS_FILTER`
  * Il filtro usato per cercare nel server LDAP gli utenti da caricare nei contatti. Il segnaposto '\{\{userProperty}}' nel filtro viene sostituito con il valore della proprietà specificata da `OVERLEAF_LDAP_CONTACTS_PROPERTY` dell'utente LDAP che avvia la ricerca. Se non definito, nessun utente viene recuperato dal server LDAP nei contatti.
* `OVERLEAF_LDAP_CONTACTS_SEARCH_BASE`
  * Specifica il DN di base da cui iniziare la ricerca dei contatti. Predefinito: `OVERLEAF_LDAP_SEARCH_BASE`.
* `OVERLEAF_LDAP_CONTACTS_SEARCH_SCOPE`
  * L'ambito della ricerca può essere `base`, `one` o `sub` (predefinito).
* `OVERLEAF_LDAP_CONTACTS_PROPERTY`
  * Specifica la proprietà dell'oggetto utente che sostituirà il segnaposto '\{\{userProperty}}' in `OVERLEAF_LDAP_CONTACTS_FILTER`.
* `OVERLEAF_LDAP_CONTACTS_NON_LDAP_VALUE`
  * Specifica il valore di `OVERLEAF_LDAP_CONTACTS_PROPERTY` se la ricerca viene avviata da un utente non LDAP. Se questa variabile non è definita, il filtro risultante non corrisponderà a nulla. Il valore `*` può essere usato come carattere jolly.

<Accordion title="Esempio">
  ```text theme={null}
  OVERLEAF_LDAP_CONTACTS_FILTER=(gidNumber={{userProperty}})
  OVERLEAF_LDAP_CONTACTS_PROPERTY=gidNumber
  OVERLEAF_LDAP_CONTACTS_NON_LDAP_VALUE=1000
  ```

  L'esempio sopra fa sì che nei contatti dell'utente LDAP corrente vengano caricati tutti gli utenti LDAP che hanno lo stesso `gid` UNIX. Gli utenti non LDAP avranno nei propri contatti tutti gli utenti LDAP con `gid=1000` UNIX.
</Accordion>

<Accordion title="File variables.env di esempio">
  ```text theme={null}
  OVERLEAF_APP_NAME="Our Overleaf Instance"

  ENABLED_LINKED_FILE_TYPES=project_file,project_output_file,url

  # Enables Thumbnail generation using ImageMagick
  ENABLE_CONVERSIONS=true

  # Disables email confirmation requirement
  EMAIL_CONFIRMATION_DISABLED=true

  ## Nginx
  # NGINX_WORKER_PROCESSES=4
  # NGINX_WORKER_CONNECTIONS=768

  ## Set for TLS via nginx-proxy
  # OVERLEAF_BEHIND_PROXY=true
  # OVERLEAF_SECURE_COOKIE=true

  OVERLEAF_SITE_URL=http://my-overleaf-instance.com
  OVERLEAF_NAV_TITLE=Our Overleaf Instance
  # OVERLEAF_HEADER_IMAGE_URL=http://somewhere.com/mylogo.png
  OVERLEAF_ADMIN_EMAIL=support@example.com

  OVERLEAF_LEFT_FOOTER=[{"text": "Contact your support team", "url": "mailto:support@example.com"}]
  OVERLEAF_RIGHT_FOOTER=[{"text":"Hello, I am on the Right", "url":"https://github.com/yu-i-i/overleaf-cep"}]

  OVERLEAF_EMAIL_FROM_ADDRESS=team@example.com
  OVERLEAF_EMAIL_SMTP_HOST=smtp.example.com
  OVERLEAF_EMAIL_SMTP_PORT=587
  OVERLEAF_EMAIL_SMTP_SECURE=false
  # OVERLEAF_EMAIL_SMTP_USER=
  # OVERLEAF_EMAIL_SMTP_PASS=
  # OVERLEAF_EMAIL_SMTP_NAME=
  OVERLEAF_EMAIL_SMTP_LOGGER=false
  OVERLEAF_EMAIL_SMTP_TLS_REJECT_UNAUTH=true
  OVERLEAF_EMAIL_SMTP_IGNORE_TLS=false
  OVERLEAF_CUSTOM_EMAIL_FOOTER=This system is run by department x

  OVERLEAF_PROXY_LEARN=true
  NAV_HIDE_POWERED_BY=true

  #################
  ## LDAP for CE ##
  #################

  EXTERNAL_AUTH=ldap
  OVERLEAF_LDAP_URL=ldap://ldap.example.com:389
  OVERLEAF_LDAP_STARTTLS=true
  OVERLEAF_LDAP_TLS_OPTS_CA_PATH=/var/lib/overleaf/certs/ldap_ca_cert.pem
  OVERLEAF_LDAP_SEARCH_BASE=ou=people,dc=example,dc=com
  OVERLEAF_LDAP_SEARCH_FILTER=(|(uid={{username}})(mail={{username}}))
  OVERLEAF_LDAP_BIND_DN=cn=ldap_reader,dc=example,dc=com
  OVERLEAF_LDAP_BIND_CREDENTIALS=GoodNewsEveryone
  OVERLEAF_LDAP_EMAIL_ATT=mail
  OVERLEAF_LDAP_FIRST_NAME_ATT=givenName
  OVERLEAF_LDAP_LAST_NAME_ATT=sn
  # OVERLEAF_LDAP_NAME_ATT=cn
  OVERLEAF_LDAP_SEARCH_ATTRIBUTES=["uid", "sn", "givenName", "mail"]

  OVERLEAF_LDAP_UPDATE_USER_DETAILS_ON_LOGIN=true

  OVERLEAF_LDAP_PLACEHOLDER='Username or email address'

  OVERLEAF_LDAP_IS_ADMIN_ATT=mail
  OVERLEAF_LDAP_IS_ADMIN_ATT_VALUE=admin@example.com

  OVERLEAF_LDAP_CONTACTS_FILTER=(gidNumber={{userProperty}})
  OVERLEAF_LDAP_CONTACTS_PROPERTY=gidNumber
  OVERLEAF_LDAP_CONTACTS_NON_LDAP_VALUE='*'
  ```
</Accordion>

## Passo dopo passo: goauthentik

Questa guida illustra una configurazione testata con [goauthentik](https://goauthentik.io/). Gli esempi usano il Base DN `dc=example,dc=com`; sostituiscilo con il tuo.

<Steps>
  <Step title="Crea un account di bind">
    Overleaf accede prima alla directory con un proprio account per trovare l'utente. In Authentik, apri **Directory > Users**, fai clic su **New User**, scegli **Internal User** e fai clic su **Next**. Inserisci un nome utente, ad esempio `ldapservice`, e fai clic su **Create**:

    <Frame caption="Authentik: crea l'account di bind">
      <img src="https://mintcdn.com/ayakaleaf-pro/TjqwH4XzxYAkHStq/images/on-premises/ldap-authentik-user-create.png?fit=max&auto=format&n=TjqwH4XzxYAkHStq&q=85&s=bf5d9a5aefd048781339157121a9e203" alt="" width="1120" height="810" data-path="images/on-premises/ldap-authentik-user-create.png" />
    </Frame>

    Apri il nuovo utente e fai clic su **Set password**. Questa password va in `OVERLEAF_LDAP_BIND_CREDENTIALS`:

    <div style={{ textAlign: "center" }}>
      <Frame caption="Authentik: imposta la password dell'account di bind (istanza di test)">
        <img src="https://mintcdn.com/ayakaleaf-pro/TjqwH4XzxYAkHStq/images/on-premises/ldap-authentik-user-page.png?fit=max&auto=format&n=TjqwH4XzxYAkHStq&q=85&s=96aad0f919dc8e74fef5995b1dde1e78" alt="" width="207" data-path="images/on-premises/ldap-authentik-user-page.png" />
      </Frame>
    </div>

    Annota il numero dell'utente nella barra degli indirizzi, ad esempio `19` in `…/#/identity/users/19`. Ti servirà nel passo 3.
  </Step>

  <Step title="Crea il provider e l'applicazione">
    Apri **Applications > Applications** e fai clic su **New Application**. La procedura guidata crea insieme l'applicazione e il relativo provider.

    1\. Assegna all'applicazione un nome e uno slug, ad esempio `overleaf-ldap`, e fai clic su **Next**:

    <Frame caption="Authentik: nome e slug dell'applicazione">
      <img src="https://mintcdn.com/ayakaleaf-pro/TjqwH4XzxYAkHStq/images/on-premises/ldap-authentik-app.png?fit=max&auto=format&n=TjqwH4XzxYAkHStq&q=85&s=0d3e6b54e9bf552bd81d8b1d6b722701" alt="" width="1120" height="810" data-path="images/on-premises/ldap-authentik-app.png" />
    </Frame>

    2\. Scegli **LDAP Provider** e fai clic su **Next**:

    <Frame caption="Authentik: scegli il provider LDAP">
      <img src="https://mintcdn.com/ayakaleaf-pro/TjqwH4XzxYAkHStq/images/on-premises/ldap-authentik-type.png?fit=max&auto=format&n=TjqwH4XzxYAkHStq&q=85&s=ee63f2682051572a08c1f5bc321a1af6" alt="" width="1120" height="810" data-path="images/on-premises/ldap-authentik-type.png" />
    </Frame>

    3\. Imposta **Bind Mode** su **Direct binding** e **Search Mode** su **Direct querying**:

    <Frame caption="Authentik: modalità di bind e di ricerca del provider LDAP">
      <img src="https://mintcdn.com/ayakaleaf-pro/TjqwH4XzxYAkHStq/images/on-premises/ldap-authentik-modes.png?fit=max&auto=format&n=TjqwH4XzxYAkHStq&q=85&s=ea147f1605e76142021d07f775d5ef53" alt="" width="1120" height="810" data-path="images/on-premises/ldap-authentik-modes.png" />
    </Frame>

    4\. Più in basso, imposta **Bind Flow** su `default-authentication-flow` e **Base DN** sul tuo Base DN, ad esempio `dc=example,dc=com`:

    <Frame caption="Authentik: bind flow e Base DN del provider LDAP">
      <img src="https://mintcdn.com/ayakaleaf-pro/TjqwH4XzxYAkHStq/images/on-premises/ldap-authentik-basedn.png?fit=max&auto=format&n=TjqwH4XzxYAkHStq&q=85&s=4ce418571d83294ee749d56b13c63d44" alt="" width="1120" height="810" data-path="images/on-premises/ldap-authentik-basedn.png" />
    </Frame>

    5\. Fai clic su **Next** fino all'ultima pagina e invia l'applicazione.
  </Step>

  <Step title="Consenti all'account di bind di cercare nella directory">
    Senza questo permesso l'account di bind vede solo se stesso, la ricerca non trova alcun utente e ogni accesso LDAP fallisce.

    Apri il provider, vai su **Permissions** e fai clic su **Assign Role Object Permission**. Come **Role**, digita il numero del passo 1 e seleziona `ak-managed-role--user-<number>`, quindi attiva **Search full LDAP directory**:

    <Frame caption="Authentik: concedi all'account di bind il permesso di ricerca (istanza di test)">
      <img src="https://mintcdn.com/ayakaleaf-pro/TjqwH4XzxYAkHStq/images/on-premises/ldap-authentik-assign.png?fit=max&auto=format&n=TjqwH4XzxYAkHStq&q=85&s=5af53c691ae845adcb4ede42c24fb600" alt="" width="1120" height="529" data-path="images/on-premises/ldap-authentik-assign.png" />
    </Frame>

    Il ruolo mostra quindi un segno di spunta sotto **Search full LDAP directory**:

    <Frame caption="Authentik: permessi di un provider LDAP (istanza di test)">
      <img src="https://mintcdn.com/ayakaleaf-pro/TjqwH4XzxYAkHStq/images/on-premises/ldap-authentik-permissions.png?fit=max&auto=format&n=TjqwH4XzxYAkHStq&q=85&s=24ae7f0dfb6d19e1b3d6584d6ccf0f0b" alt="" width="990" height="488" data-path="images/on-premises/ldap-authentik-permissions.png" />
    </Frame>
  </Step>

  <Step title="Esegui l'outpost LDAP">
    Authentik risponde alle richieste LDAP tramite un outpost, un container separato. Apri **Applications > Outposts**, crea un outpost di tipo **LDAP** con il tuo provider e distribuiscilo come descritto da Authentik. L'outpost resta in ascolto sulla porta 389 dell'host su cui è in esecuzione. Quando è connesso, mostra un segno di spunta verde:

    <Frame caption="Authentik: un outpost LDAP in esecuzione (istanza di test)">
      <img src="https://mintcdn.com/ayakaleaf-pro/TjqwH4XzxYAkHStq/images/on-premises/ldap-authentik-outposts.png?fit=max&auto=format&n=TjqwH4XzxYAkHStq&q=85&s=cd8af2f7df7b2df24d2369416509faef" alt="" width="990" height="468" data-path="images/on-premises/ldap-authentik-outposts.png" />
    </Frame>

    ```dotenv theme={null}
    OVERLEAF_LDAP_URL=ldap://ldap.example.com:389
    ```
  </Step>

  <Step title="Compila i DN">
    La pagina del provider mostra il Base DN e un esempio sotto **How to connect**:

    <Frame caption="Authentik: panoramica di un provider LDAP (istanza di test)">
      <img src="https://mintcdn.com/ayakaleaf-pro/TjqwH4XzxYAkHStq/images/on-premises/ldap-authentik-provider.png?fit=max&auto=format&n=TjqwH4XzxYAkHStq&q=85&s=9aa4b747f4c0f51533454a97d835c18c" alt="" width="990" height="773" data-path="images/on-premises/ldap-authentik-provider.png" />
    </Frame>

    Non copiare i valori di esempio così come sono:

    * **Bind DN** mostra l'account con cui hai effettuato l'accesso. Usa invece l'account di bind del passo 1: `cn=ldapservice,ou=users,<Base DN>`.
    * **Search base** mostra il Base DN. Usa `ou=users,<Base DN>`.

    ```dotenv theme={null}
    OVERLEAF_LDAP_BIND_DN=cn=ldapservice,ou=users,dc=example,dc=com
    OVERLEAF_LDAP_BIND_CREDENTIALS=<password of ldapservice>
    OVERLEAF_LDAP_SEARCH_BASE=ou=users,dc=example,dc=com
    OVERLEAF_LDAP_SEARCH_FILTER=(cn={{username}})
    ```

    <Warning>
      Authentik mantiene sotto `ou=virtual-groups` un gruppo con il nome di ogni utente. Una ricerca di `(cn=alice)` sull'intero Base DN trova sia `cn=alice,ou=users,…` sia `cn=alice,ou=virtual-groups,…`, e Overleaf rifiuta un accesso che corrisponde a più di una voce. Mantieni la search base su `ou=users,<Base DN>`.
    </Warning>
  </Step>

  <Step title="Verifica la ricerca">
    Prima di avviare Overleaf, esegui la stessa ricerca che effettuerà Overleaf. Deve restituire esattamente un `dn:`:

    ```shell theme={null}
    ldapsearch -x -H ldap://ldap.example.com:389 \
      -D cn=ldapservice,ou=users,dc=example,dc=com -w '<password of ldapservice>' \
      -b ou=users,dc=example,dc=com '(cn=alice)' dn
    ```

    Se non compare alcun `dn:`, di solito manca il permesso del passo 3.
  </Step>

  <Step title="Mappa gli amministratori (facoltativo)">
    I gruppi di un utente si trovano in `memberOf`, come DN sotto `ou=groups`. Per rendere amministratori di Overleaf i membri del gruppo Authentik `Admins`:

    ```dotenv theme={null}
    OVERLEAF_LDAP_IS_ADMIN_ATT=memberOf
    OVERLEAF_LDAP_IS_ADMIN_ATT_VALUE=cn=Admins,ou=groups,dc=example,dc=com
    ```

    <Warning>
      Il flag di amministratore viene aggiornato a ogni accesso LDAP. Con un attributo o un valore errato, ogni amministratore che accede tramite LDAP perde i diritti di amministratore. Prova prima la mappatura con un secondo account amministratore.
    </Warning>
  </Step>
</Steps>

<Accordion title="variables.env testato per goauthentik">
  ```dotenv title="variables.env" wrap theme={null}
  EXTERNAL_AUTH=ldap
  OVERLEAF_LDAP_IDENTITY_SERVICE_NAME=Log in with Authentik
  OVERLEAF_LDAP_URL=ldap://ldap.example.com:389
  OVERLEAF_LDAP_BIND_DN=cn=ldapservice,ou=users,dc=example,dc=com
  OVERLEAF_LDAP_BIND_CREDENTIALS=<password of ldapservice>
  OVERLEAF_LDAP_SEARCH_BASE=ou=users,dc=example,dc=com
  OVERLEAF_LDAP_SEARCH_FILTER=(cn={{username}})
  OVERLEAF_LDAP_EMAIL_ATT=mail
  OVERLEAF_LDAP_NAME_ATT=name
  OVERLEAF_LDAP_IS_ADMIN_ATT=memberOf
  OVERLEAF_LDAP_IS_ADMIN_ATT_VALUE=cn=Admins,ou=groups,dc=example,dc=com
  OVERLEAF_LDAP_UPDATE_USER_DETAILS_ON_LOGIN=true
  ```
</Accordion>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.