> 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/fr/configuration/overleaf-toolkit/authentication/ldap-authentication.md).

# Authentification LDAP

Cette fonctionnalité a été développée par [yu-i-i/overleaf-cep](https://github.com/yu-i-i/overleaf-cep). Ici, nous proposons quelques documents pour votre configuration.

{% hint style="warning" %}
Overleaf utilise la **passport-ldapauth** bibliothèque, qui est relativement obsolète, la compatibilité LDAP ne peut pas être totalement garantie. Avec certains fournisseurs d'identité LDAP (par exemple, <https://goauthentik.io/>), des échecs de connexion peuvent se produire. Par conséquent, si possible, il est recommandé d'utiliser la méthode OAuth/SAML auparavant.
{% endhint %}

### Qu'est-ce que LDAP

LDAP est un protocole d'authentification utilisé pour la vérification d'identité externe. Overleaf Server Pro fournit un formulaire de connexion LDAP dédié dans l'interface web, distinct de la méthode d'authentification standard. Lorsqu'un utilisateur soumet son nom d'utilisateur LDAP et son mot de passe, le backend d'Overleaf vérifie les identifiants auprès du serveur LDAP configuré, par exemple `ldap://ldap:10389`.

<figure><img src="/files/6785e52c05ce031b2af2b3b0fca8fe7479de3390" alt=""><figcaption><p>Un exemple Server Pro pour LDAP</p></figcaption></figure>

### Configuration

En interne, Overleaf LDAP utilise la [passport-ldapauth](https://github.com/vesse/passport-ldapauth) bibliothèque. La plupart de ces options de configuration sont transmises à l' `serveur` objet de configuration qui est utilisé pour configurer `passport-ldapauth`. Si vous rencontrez des difficultés pour configurer LDAP, cela vaut la peine de lire le README de `passport-ldapauth` pour vous faire une idée de la configuration attendue.

La variable d'environnement `EXTERNAL_AUTH` est requise pour activer le module d'authentification LDAP. Cette variable d'environnement précise quelles méthodes d'authentification externes sont activées. La valeur de cette variable est une liste. Si la liste inclut `ldap` alors l'authentification LDAP sera activée.

Par exemple : `EXTERNAL_AUTH=ldap saml`

Contrairement à Overleaf CEP, dans notre édition ayaka-notes, nous limitons l'authentification LDAP à une simple méthode d'authentification, disponible à `http://your-overleaf.com/ldap/login`.

Lors de l'utilisation des méthodes d'authentification LDAP, un utilisateur saisit un `nom d'utilisateur` et `mot de passe` dans le formulaire de connexion, la procédure suivante est tentée :

1. Un utilisateur LDAP est recherché dans l'annuaire LDAP à l'aide du filtre défini par `OVERLEAF_LDAP_SEARCH_FILTER` et authentifié.
2. Si l'authentification réussit, la base de données des utilisateurs d'Overleaf est vérifiée afin de trouver un utilisateur dont l'adresse e-mail principale correspond à l'adresse e-mail de l'utilisateur LDAP authentifié :
   * Si un utilisateur correspondant est trouvé, le `hashedPassword` champ de cet utilisateur est supprimé (s'il existe). Cela garantit que l'utilisateur ne pourra plus se connecter à l'avenir que via l'authentification LDAP.
   * Si aucun utilisateur correspondant n'est trouvé, un nouvel utilisateur Overleaf est créé à l'aide de l'e-mail, du prénom et du nom de famille récupérés depuis le serveur LDAP.

{% hint style="danger" %}
Pour les utilisateurs qui se connectent via LDAP, nous ne stockons pas de mots de passe hachés (ou supprimons ceux qui existent déjà) dans la base de données Mongo d'Overleaf.
{% endhint %}

#### Variables d'environnement

* `OVERLEAF_LDAP_URL` **(requis)**
  * URL du serveur LDAP.
    * Exemple : `ldaps://ldap.example.com:636` (LDAP sur SSL)
    * Exemple : `ldap://ldap.example.com:389` (non chiffré ou STARTTLS, si configuré).
* `OVERLEAF_LDAP_IDENTITY_SERVICE_NAME`
  * Nom d'affichage du service d'identité LDAP, utilisé sur la page de connexion.
  * Par défaut : `Se connecter avec le fournisseur LDAP`.
* `OVERLEAF_LDAP_EMAIL_ATT`
  * L'attribut e-mail renvoyé par le serveur LDAP, par défaut `mail`. Chaque utilisateur LDAP doit avoir au moins une adresse e-mail. Si plusieurs adresses sont fournies, seule la première sera utilisée.
* `OVERLEAF_LDAP_FIRST_NAME_ATT`
  * Nom de la propriété contenant le prénom de l'utilisateur utilisé dans l'application, généralement `givenName`.
* `OVERLEAF_LDAP_LAST_NAME_ATT`
  * Nom de la propriété contenant le nom de famille de l'utilisateur utilisé dans l'application, généralement `sn`.
* `OVERLEAF_LDAP_NAME_ATT`
  * Nom de la propriété contenant le nom complet de l'utilisateur, généralement `cn`. Si l'une des deux variables précédentes n'est pas définie, le prénom et/ou le nom de famille de l'utilisateur sont extraits de cette variable. Sinon, elle n'est pas utilisée.
* `OVERLEAF_LDAP_PLACEHOLDER`
  * Le texte indicatif pour le formulaire de connexion, par défaut `Nom d'utilisateur`.
* `OVERLEAF_LDAP_UPDATE_USER_DETAILS_ON_LOGIN`
  * Si défini sur `true`, met à jour l'utilisateur LDAP `first_name` et `last_name` au moment de la connexion, et désactive le formulaire des informations utilisateur sur la `/user/settings` page pour les utilisateurs LDAP. Sinon, les informations ne seront récupérées qu'à la première connexion.
* `OVERLEAF_LDAP_BIND_DN`
  * Le nom distinctif de l'utilisateur LDAP qui doit être utilisé pour la connexion LDAP (cet utilisateur doit pouvoir rechercher/lister les comptes sur le serveur LDAP), par exemple `cn=ldap_reader,dc=example,dc=com`. Si non défini, une liaison anonyme est utilisée.
* `OVERLEAF_LDAP_BIND_CREDENTIALS`
  * Mot de passe pour `OVERLEAF_LDAP_BIND_DN`.
* `OVERLEAF_LDAP_BIND_PROPERTY`
  * Propriété de l'utilisateur à lier au client, par défaut `dn`.
* `OVERLEAF_LDAP_SEARCH_BASE` **(requis)**
  * Le DN de base à partir duquel rechercher les utilisateurs. Par exemple, `ou=people,dc=example,dc=com`.
* `OVERLEAF_LDAP_SEARCH_FILTER`
  * Filtre de recherche LDAP avec lequel trouver un utilisateur. Utilisez le littéral '{{username}}' pour interpoler le nom d'utilisateur donné dans la recherche LDAP.
    * Exemple : `(|(uid={{username}})(mail={{username}}))` (l'utilisateur peut se connecter avec son e-mail ou avec son nom de connexion).
    * Exemple : `(sAMAccountName={{username}})` (Active Directory).
* `OVERLEAF_LDAP_SEARCH_SCOPE`
  * La portée de la recherche peut être `base`, `one`, ou `sub` (par défaut).
* `OVERLEAF_LDAP_SEARCH_ATTRIBUTES`
  * Tableau JSON d'attributs à récupérer depuis le serveur LDAP, par exemple, `["uid", "mail", "givenName", "sn"]`. Par défaut, tous les attributs sont récupérés.
* `OVERLEAF_LDAP_STARTTLS`
  * Si `true`, LDAP sur TLS est utilisé.
* `OVERLEAF_LDAP_TLS_OPTS_CA_PATH`
  * Chemin vers le fichier contenant le certificat CA utilisé pour vérifier le certificat SSL/TLS du serveur LDAP. S'il y a plusieurs certificats, il peut s'agir d'un tableau JSON de chemins vers les certificats. Les fichiers doivent être accessibles au conteneur Docker.
    * Exemple (un certificat) : `/var/lib/overleaf/certs/ldap_ca_cert.pem`
    * Exemple (certificats multiples) : `["/var/lib/overleaf/certs/ldap_ca_cert1.pem", "/var/lib/overleaf/certs/ldap_ca_cert2.pem"]`
* `OVERLEAF_LDAP_TLS_OPTS_REJECT_UNAUTH`
  * Si `true`, le certificat du serveur est vérifié par rapport à la liste des autorités de certification fournies.
* `OVERLEAF_LDAP_CACHE`
  * Si `true`, alors jusqu'à 100 identifiants à la fois seront mis en cache pendant 5 minutes.
* `OVERLEAF_LDAP_TIMEOUT`
  * Pendant combien de temps le client doit laisser les opérations s'exécuter avant d'expirer, en ms (par défaut : Infinity).
* `OVERLEAF_LDAP_CONNECT_TIMEOUT`
  * Pendant combien de temps le client doit attendre avant d'expirer sur les connexions TCP, en ms (par défaut : valeur par défaut du système d'exploitation).
* `OVERLEAF_LDAP_IS_ADMIN_ATT` et `OVERLEAF_LDAP_IS_ADMIN_ATT_VALUE`
  * Lorsque les deux variables d'environnement sont définies, le processus de connexion met à jour `user.isAdmin = true` si le profil LDAP contient l'attribut spécifié par `OVERLEAF_LDAP_IS_ADMIN_ATT` et sa valeur correspond soit à `OVERLEAF_LDAP_IS_ADMIN_ATT_VALUE` ou est un tableau contenant `OVERLEAF_LDAP_IS_ADMIN_ATT_VALUE`, sinon `user.isAdmin` est définie sur `false`. Si l'une de ces variables n'est pas définie, alors le statut administrateur n'est défini que `true` lors de la création de l'utilisateur administrateur dans Launchpad.

Les cinq variables suivantes sont utilisées pour configurer la manière dont les contacts des utilisateurs sont récupérés depuis le serveur LDAP.

* `OVERLEAF_LDAP_CONTACTS_FILTER`
  * Le filtre utilisé pour rechercher des utilisateurs dans le serveur LDAP afin de les charger dans les contacts. Le placeholder '{{userProperty}}' à l'intérieur du filtre est remplacé par la valeur de la propriété spécifiée par `OVERLEAF_LDAP_CONTACTS_PROPERTY` de l'utilisateur LDAP qui initie la recherche. Si non défini, aucun utilisateur n'est récupéré du serveur LDAP dans les contacts.
* `OVERLEAF_LDAP_CONTACTS_SEARCH_BASE`
  * Spécifie le DN de base à partir duquel commencer la recherche des contacts. Par défaut, `OVERLEAF_LDAP_SEARCH_BASE`.
* `OVERLEAF_LDAP_CONTACTS_SEARCH_SCOPE`
  * La portée de la recherche peut être `base`, `one`, ou `sub` (par défaut).
* `OVERLEAF_LDAP_CONTACTS_PROPERTY`
  * Spécifie la propriété de l'objet utilisateur qui remplacera le placeholder '{{userProperty}}' dans le `OVERLEAF_LDAP_CONTACTS_FILTER`.
* `OVERLEAF_LDAP_CONTACTS_NON_LDAP_VALUE`
  * Spécifie la valeur de `OVERLEAF_LDAP_CONTACTS_PROPERTY` si la recherche est initiée par un utilisateur non LDAP. Si cette variable n'est pas définie, le filtre résultant ne correspondra à rien. La valeur `*` peut être utilisée comme caractère générique.

<details>

<summary><strong>Exemple</strong></summary>

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

L'exemple ci-dessus charge dans les contacts de l'utilisateur LDAP actuel tous les utilisateurs LDAP qui ont le même UNIX `gid`. Les utilisateurs non LDAP auront tous les utilisateurs LDAP avec le UNIX `gid=1000` dans leurs contacts.

</details>

<details>

<summary><strong>Exemple de fichier variables.env</strong></summary>

```
OVERLEAF_APP_NAME="Notre instance Overleaf"

ENABLED_LINKED_FILE_TYPES=project_file,project_output_file,url

# Active la génération de miniatures à l'aide d'ImageMagick
ENABLE_CONVERSIONS=true

# Désactive l'exigence de confirmation par e-mail
EMAIL_CONFIRMATION_DISABLED=true

## Nginx
# NGINX_WORKER_PROCESSES=4
# NGINX_WORKER_CONNECTIONS=768

## Définir pour 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": "Contactez votre équipe de support", "url": "mailto:support@example.com"}]
OVERLEAF_RIGHT_FOOTER=[{"text":"Bonjour, je suis à droite", "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=Ce système est géré par le service x

OVERLEAF_PROXY_LEARN=true
NAV_HIDE_POWERED_BY=true

#################
## LDAP pour 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='Nom d'utilisateur ou adresse e-mail'

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/fr/configuration/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.
