> ## 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.

# Authentification LDAP

<Info>
  Cette fonctionnalité est développée par [yu-i-i/overleaf-cep](https://github.com/yu-i-i/overleaf-cep). Nous proposons ici une documentation pour vous aider à la configurer.
</Info>

<Warning>
  Overleaf utilise la bibliothèque **passport-ldapauth**, qui est relativement ancienne ; la compatibilité LDAP ne peut donc pas être entièrement garantie. Avec certains fournisseurs d'identité LDAP (par exemple [https://goauthentik.io/](https://goauthentik.io/)), des échecs de connexion peuvent survenir. C'est pourquoi, dans la mesure du possible, il est recommandé de privilégier les méthodes OAuth/SAML. Pour goauthentik, suivez le [Guide pas à pas avec goauthentik](/fr/on-premises/configuration/overleaf-toolkit/authentication/ldap-authentication#guide-pas-à-pas-avec-goauthentik) ci-dessous, qui a été testé.
</Warning>

### Qu'est-ce que LDAP ?

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

<Frame caption="Un exemple de LDAP dans 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>

### Configuration

En interne, le LDAP d'Overleaf utilise la bibliothèque [passport-ldapauth](https://github.com/vesse/passport-ldapauth). La plupart de ces options de configuration sont transmises à l'objet de configuration `server`, qui sert à configurer `passport-ldapauth`. Si vous rencontrez des difficultés pour configurer LDAP, il est utile de lire le README de `passport-ldapauth` pour comprendre la configuration attendue.

La variable d'environnement `EXTERNAL_AUTH` est requise pour activer le module d'authentification LDAP. Elle indique quelles méthodes d'authentification externes sont activées. Sa valeur est une liste. Si la liste contient `ldap`, l'authentification LDAP est activée.

Par exemple : `EXTERNAL_AUTH=ldap saml`

Contrairement à Overleaf CEP, dans notre édition ayaka-notes, l'authentification LDAP est limitée à une pure méthode d'authentification, disponible à l'adresse `http://your-overleaf.com/ldap/login`.

Lorsque la méthode d'authentification LDAP est utilisée et qu'un utilisateur saisit un `username` et un `password` dans le formulaire de connexion, le processus suivant est tenté :

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

<Danger>
  Pour les utilisateurs qui se connectent via LDAP, nous ne stockons pas de mots de passe hachés dans la base de données MongoDB d'Overleaf (et supprimons ceux qui existent).
</Danger>

#### Variables d'environnement

* `OVERLEAF_LDAP_URL` <strong>(obligatoire)</strong>
  * 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.
  * Valeur par défaut : `Log in with LDAP Provider`.
* `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 est utilisée.
* `OVERLEAF_LDAP_FIRST_NAME_ATT`
  * Le 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`
  * Le 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`
  * Le 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 l'utilisateur sont extraits de cette variable. Sinon, elle n'est pas utilisée.
* `OVERLEAF_LDAP_PLACEHOLDER`
  * Le texte indicatif du formulaire de connexion, par défaut `Username`.
* `OVERLEAF_LDAP_UPDATE_USER_DETAILS_ON_LOGIN`
  * Si la valeur est `true`, les champs `first_name` et `last_name` de l'utilisateur LDAP sont mis à jour à la connexion, et le formulaire des informations utilisateur de la page `/user/settings` est désactivé pour les utilisateurs LDAP. Sinon, les informations ne sont récupérées qu'à la première connexion.
* `OVERLEAF_LDAP_BIND_DN`
  * Le nom distinctif (DN) de l'utilisateur LDAP à utiliser 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`. S'il n'est pas défini, une liaison anonyme est utilisée.
* `OVERLEAF_LDAP_BIND_CREDENTIALS`
  * Mot de passe de `OVERLEAF_LDAP_BIND_DN`.
* `OVERLEAF_LDAP_BIND_PROPERTY`
  * Propriété de l'utilisateur utilisée pour la liaison avec le client, par défaut `dn`.
* `OVERLEAF_LDAP_SEARCH_BASE` <strong>(obligatoire)</strong>
  * 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 permettant de trouver un utilisateur. Utilisez le littéral '\{\{username}}' pour que le nom d'utilisateur fourni soit interpolé dans la recherche LDAP.
    * Exemple : `(|(uid={{username}})(mail={{username}}))` (l'utilisateur peut se connecter avec son e-mail ou son identifiant).
    * 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 des 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 la valeur est `true`, LDAP sur TLS est utilisé.
* `OVERLEAF_LDAP_TLS_OPTS_CA_PATH`
  * Chemin du fichier contenant le certificat de l'autorité de certification (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 (plusieurs certificats) : `["/var/lib/overleaf/certs/ldap_ca_cert1.pem", "/var/lib/overleaf/certs/ldap_ca_cert2.pem"]`
* `OVERLEAF_LDAP_TLS_OPTS_REJECT_UNAUTH`
  * Si la valeur est `true`, le certificat du serveur est vérifié par rapport à la liste des CA fournies.
* `OVERLEAF_LDAP_CACHE`
  * Si la valeur est `true`, jusqu'à 100 identifiants à la fois seront mis en cache pendant 5 minutes.
* `OVERLEAF_LDAP_TIMEOUT`
  * Durée pendant laquelle le client laisse les opérations s'exécuter avant expiration, en ms (par défaut : Infinity).
* `OVERLEAF_LDAP_CONNECT_TIMEOUT`
  * Durée pendant laquelle le client attend avant l'expiration des 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 ces deux variables d'environnement sont définies, le processus de connexion définit `user.isAdmin = true` si le profil LDAP contient l'attribut spécifié par `OVERLEAF_LDAP_IS_ADMIN_ATT` et que sa valeur correspond à `OVERLEAF_LDAP_IS_ADMIN_ATT_VALUE` ou est un tableau contenant `OVERLEAF_LDAP_IS_ADMIN_ATT_VALUE` ; sinon, `user.isAdmin` est défini sur `false`. Si l'une de ces variables n'est pas définie, le statut d'administrateur n'est défini sur `true` que lors de la création de l'utilisateur administrateur dans Launchpad.

Les cinq variables suivantes servent à 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, sur le serveur LDAP, les utilisateurs à charger dans les contacts. Le marqueur '\{\{userProperty}}' dans le filtre est remplacé par la valeur de la propriété spécifiée par `OVERLEAF_LDAP_CONTACTS_PROPERTY` de l'utilisateur LDAP qui lance la recherche. S'il n'est pas défini, aucun utilisateur n'est récupéré depuis le serveur LDAP dans les contacts.
* `OVERLEAF_LDAP_CONTACTS_SEARCH_BASE`
  * Indique 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`
  * Indique la propriété de l'objet utilisateur qui remplacera le marqueur '\{\{userProperty}}' dans `OVERLEAF_LDAP_CONTACTS_FILTER`.
* `OVERLEAF_LDAP_CONTACTS_NON_LDAP_VALUE`
  * Indique la valeur de `OVERLEAF_LDAP_CONTACTS_PROPERTY` si la recherche est lancé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.

<Accordion title="Exemple">
  ```text theme={null}
  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 ayant le même `gid` UNIX. Les utilisateurs non LDAP auront dans leurs contacts tous les utilisateurs LDAP ayant le `gid=1000` UNIX.
</Accordion>

<Accordion title="Exemple de fichier variables.env">
  ```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>

## Guide pas à pas avec goauthentik

Ce guide décrit une configuration testée avec [goauthentik](https://goauthentik.io/). Les exemples utilisent le Base DN `dc=example,dc=com` ; remplacez-le par le vôtre.

<Steps>
  <Step title="Créer un compte de liaison (bind)">
    Overleaf se connecte d'abord à l'annuaire avec son propre compte pour trouver l'utilisateur. Dans Authentik, ouvrez **Directory > Users**, cliquez sur **New User**, choisissez **Internal User** puis cliquez sur **Next**. Saisissez un nom d'utilisateur, par exemple `ldapservice`, puis cliquez sur **Create** :

    <Frame caption="Authentik : créer le compte de liaison">
      <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>

    Ouvrez le nouvel utilisateur et cliquez sur **Set password**. Ce mot de passe va dans `OVERLEAF_LDAP_BIND_CREDENTIALS` :

    <div style={{ textAlign: "center" }}>
      <Frame caption="Authentik : définir le mot de passe du compte de liaison (instance de 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>

    Notez le numéro de l'utilisateur dans la barre d'adresse, par exemple `19` dans `…/#/identity/users/19`. Vous en aurez besoin à l'étape 3.
  </Step>

  <Step title="Créer le fournisseur et l'application">
    Ouvrez **Applications > Applications** et cliquez sur **New Application**. L'assistant crée l'application et son fournisseur en même temps.

    1\. Donnez à l'application un nom et un slug, par exemple `overleaf-ldap`, puis cliquez sur **Next** :

    <Frame caption="Authentik : nom et slug de l'application">
      <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\. Choisissez **LDAP Provider** et cliquez sur **Next** :

    <Frame caption="Authentik : choisir le fournisseur 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\. Réglez **Bind Mode** sur **Direct binding** et **Search Mode** sur **Direct querying** :

    <Frame caption="Authentik : modes de liaison et de recherche du fournisseur 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\. Plus bas, réglez **Bind Flow** sur `default-authentication-flow` et **Base DN** sur votre Base DN, par exemple `dc=example,dc=com` :

    <Frame caption="Authentik : flux de liaison et Base DN du fournisseur 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\. Cliquez sur **Next** jusqu'à la dernière page et validez l'application.
  </Step>

  <Step title="Autoriser le compte de liaison à parcourir l'annuaire">
    Sans cette autorisation, le compte de liaison ne voit que lui-même, la recherche ne trouve aucun utilisateur et toutes les connexions LDAP échouent.

    Ouvrez le fournisseur, allez dans **Permissions** et cliquez sur **Assign Role Object Permission**. Dans **Role**, saisissez le numéro noté à l'étape 1 et choisissez `ak-managed-role--user-<number>`, puis activez **Search full LDAP directory** :

    <Frame caption="Authentik : accorder l'autorisation de recherche au compte de liaison (instance de 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>

    Le rôle affiche alors une coche sous **Search full LDAP directory** :

    <Frame caption="Authentik : autorisations d'un fournisseur LDAP (instance de 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="Lancer l'avant-poste LDAP">
    Authentik répond aux requêtes LDAP via un avant-poste (outpost), un conteneur distinct. Ouvrez **Applications > Outposts**, créez un avant-poste de type **LDAP** avec votre fournisseur et déployez-le comme l'indique Authentik. Il écoute sur le port 389 de l'hôte sur lequel il s'exécute. Une fois connecté, il affiche une coche verte :

    <Frame caption="Authentik : un avant-poste LDAP en fonctionnement (instance de 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="Renseigner les DN">
    La page du fournisseur affiche le Base DN et un exemple sous **How to connect** :

    <Frame caption="Authentik : vue d'ensemble d'un fournisseur LDAP (instance de 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>

    Ne recopiez pas les valeurs d'exemple telles quelles :

    * **Bind DN** affiche le compte avec lequel vous êtes connecté. Utilisez plutôt le compte de liaison de l'étape 1 : `cn=ldapservice,ou=users,<Base DN>`.
    * **Search base** affiche le Base DN. Utilisez `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 conserve sous `ou=virtual-groups` un groupe portant le nom de chaque utilisateur. Une recherche de `(cn=alice)` dans tout le Base DN trouve à la fois `cn=alice,ou=users,…` et `cn=alice,ou=virtual-groups,…`, et Overleaf refuse une connexion qui correspond à plus d'une entrée. Conservez la base de recherche `ou=users,<Base DN>`.
    </Warning>
  </Step>

  <Step title="Vérifier la recherche">
    Avant de démarrer Overleaf, exécutez la recherche qu'il effectuera. Elle doit afficher exactement 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
    ```

    L'absence totale de `dn:` signifie généralement que l'autorisation de l'étape 3 est manquante.
  </Step>

  <Step title="Associer les administrateurs (facultatif)">
    Les groupes d'un utilisateur figurent dans `memberOf`, sous forme de DN sous `ou=groups`. Pour que les membres du groupe Authentik `Admins` deviennent administrateurs d'Overleaf :

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

    <Warning>
      L'indicateur d'administrateur est mis à jour à chaque connexion LDAP. Avec un attribut ou une valeur incorrects, tout administrateur qui se connecte via LDAP perd ses droits d'administrateur. Testez d'abord l'association avec un second compte administrateur.
    </Warning>
  </Step>
</Steps>

<Accordion title="Fichier variables.env testé pour 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.