> For the complete documentation index, see [llms.txt](https://overleaf-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://overleaf-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 utilizza 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/>), potrebbero verificarsi errori di accesso. Pertanto, se possibile, si consiglia di utilizzare 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 la propria 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 di Server Pro per LDAP</p></figcaption></figure>

### Configurazione

Internamente, Overleaf LDAP utilizza la [passport-ldapauth](https://github.com/vesse/passport-ldapauth) libreria. La maggior parte di queste opzioni di configurazione viene passata al `server` oggetto config, che viene utilizzato per configurare `passport-ldapauth`. Se hai problemi a configurare LDAP, vale la pena leggere il README per `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 esterni sono attivati. Il valore di questa variabile è un elenco. Se l'elenco include `ldap` allora l'autenticazione LDAP sarà 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 metodi di autenticazione LDAP, un utente inserisce un `nome utente` e `password` nel modulo di accesso, si tenta:

1. Viene cercato un utente LDAP nella directory LDAP usando il filtro definito da `OVERLEAF_LDAP_SEARCH_FILTER` e autenticato.
2. Se l'autenticazione ha successo, nel database utenti di Overleaf viene cercato un utente con l'indirizzo email principale che corrisponde all'indirizzo email dell'utente LDAP autenticato:
   * Se viene trovato un utente corrispondente, il `hashedPassword` campo per 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.

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

#### Variabili d'ambiente

* `OVERLEAF_LDAP_URL` **(obbligatorio)**
  * URL del server LDAP.
    * Esempio: `ldaps://ldap.example.com:636` (LDAP su SSL)
    * Esempio: `ldap://ldap.example.com:389` (non crittografato o STARTTLS, se configurato).
* `OVERLEAF_LDAP_IDENTITY_SERVICE_NAME`
  * Nome visualizzato del servizio di identità LDAP, usato nella pagina di accesso.
  * Impostazione predefinita: `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 una delle due variabili precedenti non è definita, il nome e/o il cognome dell'utente viene estratto da questa variabile. Altrimenti, non viene usata.
* `OVERLEAF_LDAP_PLACEHOLDER`
  * Il segnaposto per il modulo di accesso, predefinito `Nome utente`.
* `OVERLEAF_LDAP_UPDATE_USER_DETAILS_ON_LOGIN`
  * Se impostato su `true`, aggiorna l'utente LDAP `first_name` e `last_name` campo al momento dell'accesso, e disattiva il modulo dei dettagli utente nella `/user/settings` pagina 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 dovrebbe 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 da associare al client, predefinita `dn`.
* `OVERLEAF_LDAP_SEARCH_BASE` **(obbligatorio)**
  * 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 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 accesso).
    * 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 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 contenitore 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 lasciare 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: quello 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` oppure è un array contenente `OVERLEAF_LDAP_IS_ADMIN_ATT_VALUE`, altrimenti `user.isAdmin` viene 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 degli utenti vengono recuperati dal server LDAP.

* `OVERLEAF_LDAP_CONTACTS_FILTER`
  * Il filtro usato per cercare gli 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 `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 precedente comporta il caricamento nei contatti dell'utente LDAP corrente di 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>Esempio di file variables.env</strong></summary>

```
OVERLEAF_APP_NAME="Our Overleaf Instance"

ENABLED_LINKED_FILE_TYPES=project_file,project_output_file,url

# Abilita la generazione delle miniature usando ImageMagick
ENABLE_CONVERSIONS=true

# Disabilita il requisito di conferma dell'email
EMAIL_CONFIRMATION_DISABLED=true

## Nginx
# NGINX_WORKER_PROCESSES=4
# NGINX_WORKER_CONNECTIONS=768

## Imposta 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 sulla destra", "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://overleaf-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.
