> For the complete documentation index, see [llms.txt](https://ayakaleaf-pro.ayaka.space/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://ayakaleaf-pro.ayaka.space/on-premises/it/configurazione/overleaf-toolkit/authentication/ldap-authentication.md).

# Autenticazione LDAP

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.

{% hint style="warning" %}
Overleaf usa la **passport-ldapauth** libreria, che è relativamente obsoleta, la compatibilità LDAP non può essere garantita completamente. Con alcuni provider di identità LDAP (ad esempio, <https://goauthentik.io/>), possono verificarsi errori di accesso. Pertanto, se possibile, si consiglia di usare prima il metodo OAuth/SAML.
{% endhint %}

### Cos'è LDAP

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

<figure><img src="/files/0347fb57df07b5a594e2878d99381cffd9472990" alt=""><figcaption><p>Un esempio Server Pro per LDAP</p></figcaption></figure>

### Configurazione

Internamente, Overleaf LDAP usa la [passport-ldapauth](https://github.com/vesse/passport-ldapauth) libreria. La maggior parte di queste opzioni di configurazione viene passata al `server` config object utilizzato per configurare `passport-ldapauth`. Se hai problemi a configurare LDAP, vale la pena leggere il README di `passport-ldapauth` per farsi 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` allora 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 puro metodo di autenticazione, disponibile all'indirizzo `http://your-overleaf.com/ldap/login`.

Quando si utilizzano i metodi di autenticazione LDAP, un utente inserisce un `nome utente` e `password` nel modulo di accesso, si tenta:

1. Un utente LDAP viene cercato nella directory LDAP utilizzando il filtro definito da `OVERLEAF_LDAP_SEARCH_FILTER` e autenticato.
2. Se l'autenticazione ha esito positivo, nel database utenti di Overleaf viene verificata la presenza di un utente con l'indirizzo email principale che corrisponde all'indirizzo email dell'utente LDAP autenticato:
   * Se viene trovato un utente corrispondente, `hashedPassword` viene eliminato il campo per questo utente (se esiste). Questo 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.

{% hint style="danger" %}
Per gli utenti che accedono tramite LDAP, non memorizziamo (o rimuoviamo eventuali) password hash nel database Mongo di Overleaf.
{% endhint %}

#### Variabili d'ambiente

* `OVERLEAF_LDAP_URL` **(richiesto)**
  * 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 per il servizio di identità LDAP, usato nella pagina di accesso.
  * Predefinito a `Accedi con il provider LDAP`.
* `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 nessuna delle due variabili precedenti è definita, il nome e/o cognome dell'utente vengono estratti da questa variabile. Altrimenti, non viene usata.
* `OVERLEAF_LDAP_PLACEHOLDER`
  * Il segnaposto per il modulo di accesso, predefinito a `Nome utente`.
* `OVERLEAF_LDAP_UPDATE_USER_DETAILS_ON_LOGIN`
  * Se impostato su `true`, aggiorna l'utente LDAP `first_name` e `last_name` campo all'accesso, e disattiva il modulo dei dettagli utente nella pagina `/user/settings` per gli utenti LDAP. Altrimenti, i dettagli saranno recuperati solo al primo accesso.
* `OVERLEAF_LDAP_BIND_DN`
  * Il nome distinto dell'utente LDAP che deve essere usato per la connessione LDAP (questo utente dovrebbe poter cercare/elencare gli account sul server LDAP), ad esempio, `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 da associare al client, predefinito a `dn`.
* `OVERLEAF_LDAP_SEARCH_BASE` **(richiesto)**
  * Il DN di base da cui cercare gli utenti. Ad esempio, `ou=people,dc=example,dc=com`.
* `OVERLEAF_LDAP_SEARCH_FILTER`
  * Filtro di ricerca LDAP con cui trovare un utente. Usa il letterale '{{username}}' per interpolare il nome utente fornito nella ricerca LDAP.
    * Esempio: `(|(uid={{username}})(mail={{username}}))` (l'utente può accedere con email o con nome utente).
    * Esempio: `(sAMAccountName={{username}})` (Active Directory).
* `OVERLEAF_LDAP_SEARCH_SCOPE`
  * L'ambito della ricerca può essere `base`, `uno`, oppure `sub` (predefinito).
* `OVERLEAF_LDAP_SEARCH_ATTRIBUTES`
  * Array JSON di attributi da recuperare dal server LDAP, ad esempio, `["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`, allora fino a 100 credenziali alla volta verranno memorizzate nella cache per 5 minuti.
* `OVERLEAF_LDAP_TIMEOUT`
  * Per quanto tempo il client deve mantenere attive le operazioni prima del timeout, ms (Predefinito: Infinity).
* `OVERLEAF_LDAP_CONNECT_TIMEOUT`
  * Per quanto tempo il client deve attendere prima del timeout sulle connessioni TCP, ms (Predefinito: impostazione predefinita 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 aggiorna `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` o è un array contenente `OVERLEAF_LDAP_IS_ADMIN_ATT_VALUE`, altrimenti `user.isAdmin` è impostato a `false`. Se una di queste variabili non è impostata, allora lo stato di amministratore viene impostato solo a `true` durante la creazione dell'utente amministratore in Launchpad.

Le cinque variabili seguenti vengono usate per configurare come i contatti dell'utente vengono recuperati dal server LDAP.

* `OVERLEAF_LDAP_CONTACTS_FILTER`
  * Il filtro usato per cercare utenti nel server LDAP da caricare nei contatti. Il segnaposto '{{userProperty}}' all'interno del filtro viene sostituito con il valore della proprietà specificata da `OVERLEAF_LDAP_CONTACTS_PROPERTY` dall'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 a `OVERLEAF_LDAP_SEARCH_BASE`.
* `OVERLEAF_LDAP_CONTACTS_SEARCH_SCOPE`
  * L'ambito della ricerca può essere `base`, `uno`, oppure `sub` (predefinito).
* `OVERLEAF_LDAP_CONTACTS_PROPERTY`
  * Specifica la proprietà dell'oggetto utente che sostituirà il segnaposto '{{userProperty}}' nel `OVERLEAF_LDAP_CONTACTS_FILTER`.
* `OVERLEAF_LDAP_CONTACTS_NON_LDAP_VALUE`
  * Specifica il valore di `OVERLEAF_LDAP_CONTACTS_PROPERTY` se la ricerca è 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.

<details>

<summary><strong>Esempio</strong></summary>

```
OVERLEAF_LDAP_CONTACTS_FILTER=(gidNumber={{userProperty}})
OVERLEAF_LDAP_CONTACTS_PROPERTY=gidNumber
OVERLEAF_LDAP_CONTACTS_NON_LDAP_VALUE=1000
```

L'esempio sopra porta a caricare nei contatti dell'attuale utente LDAP tutti gli utenti LDAP che hanno lo stesso UNIX `gid`. Gli utenti non LDAP avranno tutti gli utenti LDAP con UNIX `gid=1000` nei loro contatti.

</details>

<details>

<summary><strong>File variables.env di esempio</strong></summary>

```
OVERLEAF_APP_NAME="La nostra istanza Overleaf"

ENABLED_LINKED_FILE_TYPES=project_file,project_output_file,url

# Consente la generazione delle miniature usando ImageMagick
ENABLE_CONVERSIONS=true

# Disabilita il requisito di conferma email
EMAIL_CONFIRMATION_DISABLED=true

## Nginx
# NGINX_WORKER_PROCESSES=4
# NGINX_WORKER_CONNECTIONS=768

## Impostato per TLS tramite nginx-proxy
# OVERLEAF_BEHIND_PROXY=true
# OVERLEAF_SECURE_COOKIE=true

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

OVERLEAF_LEFT_FOOTER=[{"text": "Contatta il tuo team di supporto", "url": "mailto:support@example.com"}]
OVERLEAF_RIGHT_FOOTER=[{"text":"Ciao, sono sul lato destro", "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=Questo sistema è gestito dal dipartimento x

OVERLEAF_PROXY_LEARN=true
NAV_HIDE_POWERED_BY=true

#################
## LDAP per 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='Nome utente o indirizzo email'

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='*'
```

</details>


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://ayakaleaf-pro.ayaka.space/on-premises/it/configurazione/overleaf-toolkit/authentication/ldap-authentication.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
