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

# LDAP-authenticatie

<Info>
  Deze functie is ontwikkeld door [yu-i-i/overleaf-cep](https://github.com/yu-i-i/overleaf-cep). Hier bieden we wat documentatie voor je configuratie.
</Info>

<Warning>
  Overleaf gebruikt de bibliotheek **passport-ldapauth**, die relatief verouderd is; LDAP-compatibiliteit kan daarom niet volledig worden gegarandeerd. Bij bepaalde LDAP-identiteitsproviders (bijvoorbeeld [https://goauthentik.io/](https://goauthentik.io/)) kunnen aanmeldingen mislukken. Daarom wordt aanbevolen om, indien mogelijk, bij voorkeur OAuth/SAML te gebruiken. Volg voor goauthentik de geteste handleiding [Stap voor stap: goauthentik](/nl/on-premises/configuration/overleaf-toolkit/authentication/ldap-authentication#stap-voor-stap-goauthentik) hieronder.
</Warning>

### Wat is LDAP

LDAP is een authenticatieprotocol dat wordt gebruikt voor externe identiteitsverificatie. Overleaf Server Pro biedt in de webinterface een apart LDAP-aanmeldformulier, los van de standaard authenticatiemethode. Wanneer een gebruiker zijn LDAP-gebruikersnaam en -wachtwoord invoert, controleert de Overleaf-backend de inloggegevens bij de geconfigureerde LDAP-server, bijvoorbeeld `ldap://ldap:10389`.

<Frame caption="Een Server Pro-voorbeeld voor LDAP">
  <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>

### Configuratie

Intern gebruikt Overleaf LDAP de bibliotheek [passport-ldapauth](https://github.com/vesse/passport-ldapauth). De meeste van deze configuratieopties worden doorgegeven aan het configuratieobject `server`, dat wordt gebruikt om `passport-ldapauth` te configureren. Als je problemen hebt met het configureren van LDAP, is het de moeite waard om de README van `passport-ldapauth` te lezen om een idee te krijgen van de configuratie die het verwacht.

De omgevingsvariabele `EXTERNAL_AUTH` is vereist om de LDAP-authenticatiemodule in te schakelen. Deze omgevingsvariabele bepaalt welke externe authenticatiemethoden worden geactiveerd. De waarde van deze variabele is een lijst. Als de lijst `ldap` bevat, wordt LDAP-authenticatie geactiveerd.

Bijvoorbeeld: `EXTERNAL_AUTH=ldap saml`

Anders dan bij Overleaf CEP beperken we in onze ayaka-notes-editie LDAP-authenticatie tot een zuivere authenticatiemethode, die beschikbaar is op `http://your-overleaf.com/ldap/login`.

Wanneer een gebruiker bij LDAP-authenticatie een `username` en `password` invoert in het aanmeldformulier, gebeurt het volgende:

1. Er wordt in de LDAP-directory gezocht naar een LDAP-gebruiker met het filter dat is gedefinieerd in `OVERLEAF_LDAP_SEARCH_FILTER`, en deze wordt geauthenticeerd.
2. Als de authenticatie slaagt, wordt in de Overleaf-gebruikersdatabase gezocht naar een gebruiker waarvan het primaire e-mailadres overeenkomt met het e-mailadres van de geauthenticeerde LDAP-gebruiker:
   * Als er een overeenkomende gebruiker wordt gevonden, wordt het veld `hashedPassword` van deze gebruiker verwijderd (als het bestaat). Zo kan de gebruiker zich in de toekomst alleen nog via LDAP-authenticatie aanmelden.
   * Als er geen overeenkomende gebruiker wordt gevonden, wordt een nieuwe Overleaf-gebruiker aangemaakt met het e-mailadres, de voornaam en de achternaam die van de LDAP-server zijn opgehaald.

<Danger>
  Voor gebruikers die zich via LDAP aanmelden, slaan we geen gehashte wachtwoorden op in de Mongo-database van Overleaf (en bestaande worden verwijderd).
</Danger>

#### Omgevingsvariabelen

* `OVERLEAF_LDAP_URL` <strong>(vereist)</strong>
  * URL van de LDAP-server.
    * Voorbeeld: `ldaps://ldap.example.com:636` (LDAP over SSL)
    * Voorbeeld: `ldap://ldap.example.com:389` (onversleuteld of STARTTLS, indien geconfigureerd).
* `OVERLEAF_LDAP_IDENTITY_SERVICE_NAME`
  * Weergavenaam van de LDAP-identiteitsdienst, gebruikt op de aanmeldpagina.
  * Standaard `Log in with LDAP Provider`.
* `OVERLEAF_LDAP_EMAIL_ATT`
  * Het e-mailattribuut dat door de LDAP-server wordt teruggegeven, standaard `mail`. Elke LDAP-gebruiker moet ten minste één e-mailadres hebben. Als er meerdere adressen worden opgegeven, wordt alleen het eerste gebruikt.
* `OVERLEAF_LDAP_FIRST_NAME_ATT`
  * De naam van de eigenschap met de voornaam van de gebruiker die in de applicatie wordt gebruikt, meestal `givenName`.
* `OVERLEAF_LDAP_LAST_NAME_ATT`
  * De naam van de eigenschap met de achternaam van de gebruiker die in de applicatie wordt gebruikt, meestal `sn`.
* `OVERLEAF_LDAP_NAME_ATT`
  * De naam van de eigenschap met de volledige naam van de gebruiker, meestal `cn`. Als een van de twee vorige variabelen niet is gedefinieerd, wordt de voor- en/of achternaam van de gebruiker uit deze variabele gehaald. Anders wordt deze niet gebruikt.
* `OVERLEAF_LDAP_PLACEHOLDER`
  * De placeholder voor het aanmeldformulier, standaard `Username`.
* `OVERLEAF_LDAP_UPDATE_USER_DETAILS_ON_LOGIN`
  * Indien ingesteld op `true`, worden de velden `first_name` en `last_name` van de LDAP-gebruiker bij het aanmelden bijgewerkt en wordt het formulier met gebruikersgegevens op de pagina `/user/settings` voor LDAP-gebruikers uitgeschakeld. Anders worden de gegevens alleen bij de eerste aanmelding opgehaald.
* `OVERLEAF_LDAP_BIND_DN`
  * De distinguished name van de LDAP-gebruiker die voor de LDAP-verbinding moet worden gebruikt (deze gebruiker moet accounts op de LDAP-server kunnen zoeken/weergeven), bijv. `cn=ldap_reader,dc=example,dc=com`. Als dit niet is gedefinieerd, wordt anonieme binding gebruikt.
* `OVERLEAF_LDAP_BIND_CREDENTIALS`
  * Wachtwoord voor `OVERLEAF_LDAP_BIND_DN`.
* `OVERLEAF_LDAP_BIND_PROPERTY`
  * Eigenschap van de gebruiker waartegen bij de client wordt gebonden, standaard `dn`.
* `OVERLEAF_LDAP_SEARCH_BASE` <strong>(vereist)</strong>
  * De basis-DN van waaruit naar gebruikers wordt gezocht. Bijv. `ou=people,dc=example,dc=com`.
* `OVERLEAF_LDAP_SEARCH_FILTER`
  * LDAP-zoekfilter waarmee een gebruiker wordt gevonden. Gebruik de letterlijke tekst '\{\{username}}' om de opgegeven gebruikersnaam in de LDAP-zoekopdracht in te voegen.
    * Voorbeeld: `(|(uid={{username}})(mail={{username}}))` (gebruiker kan zich aanmelden met e-mailadres of met aanmeldnaam).
    * Voorbeeld: `(sAMAccountName={{username}})` (Active Directory).
* `OVERLEAF_LDAP_SEARCH_SCOPE`
  * Het bereik van de zoekopdracht kan `base`, `one` of `sub` (standaard) zijn.
* `OVERLEAF_LDAP_SEARCH_ATTRIBUTES`
  * JSON-array met attributen die van de LDAP-server moeten worden opgehaald, bijv. `["uid", "mail", "givenName", "sn"]`. Standaard worden alle attributen opgehaald.
* `OVERLEAF_LDAP_STARTTLS`
  * Indien `true`, wordt LDAP over TLS gebruikt.
* `OVERLEAF_LDAP_TLS_OPTS_CA_PATH`
  * Pad naar het bestand met het CA-certificaat waarmee het SSL/TLS-certificaat van de LDAP-server wordt geverifieerd. Bij meerdere certificaten kan het een JSON-array met paden naar de certificaten zijn. De bestanden moeten toegankelijk zijn voor de Docker-container.
    * Voorbeeld (één certificaat): `/var/lib/overleaf/certs/ldap_ca_cert.pem`
    * Voorbeeld (meerdere certificaten): `["/var/lib/overleaf/certs/ldap_ca_cert1.pem", "/var/lib/overleaf/certs/ldap_ca_cert2.pem"]`
* `OVERLEAF_LDAP_TLS_OPTS_REJECT_UNAUTH`
  * Indien `true`, wordt het servercertificaat geverifieerd aan de hand van de lijst met opgegeven CA's.
* `OVERLEAF_LDAP_CACHE`
  * Indien `true`, worden maximaal 100 inloggegevens tegelijk gedurende 5 minuten gecachet.
* `OVERLEAF_LDAP_TIMEOUT`
  * Hoe lang de client bewerkingen laat lopen voordat er een time-out optreedt, in ms (standaard: Infinity).
* `OVERLEAF_LDAP_CONNECT_TIMEOUT`
  * Hoe lang de client wacht voordat er een time-out optreedt bij TCP-verbindingen, in ms (standaard: standaardwaarde van het besturingssysteem).
* `OVERLEAF_LDAP_IS_ADMIN_ATT` en `OVERLEAF_LDAP_IS_ADMIN_ATT_VALUE`
  * Wanneer beide omgevingsvariabelen zijn ingesteld, zet het aanmeldproces `user.isAdmin = true` als het LDAP-profiel het attribuut bevat dat is opgegeven in `OVERLEAF_LDAP_IS_ADMIN_ATT` en de waarde daarvan overeenkomt met `OVERLEAF_LDAP_IS_ADMIN_ATT_VALUE` of een array is die `OVERLEAF_LDAP_IS_ADMIN_ATT_VALUE` bevat; anders wordt `user.isAdmin` ingesteld op `false`. Als een van deze variabelen niet is ingesteld, wordt de beheerdersstatus alleen op `true` gezet bij het aanmaken van de beheerder in Launchpad.

De volgende vijf variabelen worden gebruikt om te configureren hoe gebruikerscontacten van de LDAP-server worden opgehaald.

* `OVERLEAF_LDAP_CONTACTS_FILTER`
  * Het filter waarmee op de LDAP-server wordt gezocht naar gebruikers die in de contacten moeten worden geladen. De placeholder '\{\{userProperty}}' in het filter wordt vervangen door de waarde van de eigenschap die is opgegeven in `OVERLEAF_LDAP_CONTACTS_PROPERTY`, afkomstig van de LDAP-gebruiker die de zoekopdracht start. Als dit niet is gedefinieerd, worden er geen gebruikers van de LDAP-server in de contacten geladen.
* `OVERLEAF_LDAP_CONTACTS_SEARCH_BASE`
  * Geeft de basis-DN op van waaruit naar contacten wordt gezocht. Standaard `OVERLEAF_LDAP_SEARCH_BASE`.
* `OVERLEAF_LDAP_CONTACTS_SEARCH_SCOPE`
  * Het bereik van de zoekopdracht kan `base`, `one` of `sub` (standaard) zijn.
* `OVERLEAF_LDAP_CONTACTS_PROPERTY`
  * Geeft de eigenschap van het gebruikersobject op die de placeholder '\{\{userProperty}}' in `OVERLEAF_LDAP_CONTACTS_FILTER` vervangt.
* `OVERLEAF_LDAP_CONTACTS_NON_LDAP_VALUE`
  * Geeft de waarde van `OVERLEAF_LDAP_CONTACTS_PROPERTY` op als de zoekopdracht wordt gestart door een niet-LDAP-gebruiker. Als deze variabele niet is gedefinieerd, levert het resulterende filter niets op. De waarde `*` kan als wildcard worden gebruikt.

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

  Het bovenstaande voorbeeld zorgt ervoor dat alle LDAP-gebruikers met dezelfde UNIX-`gid` in de contacten van de huidige LDAP-gebruiker worden geladen. Niet-LDAP-gebruikers krijgen alle LDAP-gebruikers met UNIX-`gid=1000` in hun contacten.
</Accordion>

<Accordion title="Voorbeeld van een variables.env-bestand">
  ```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>

## Stap voor stap: goauthentik

Hieronder doorlopen we een setup die is getest met [goauthentik](https://goauthentik.io/). De voorbeelden gebruiken de Base DN `dc=example,dc=com`; vervang deze door je eigen.

<Steps>
  <Step title="Maak een bind-account aan">
    Overleaf logt eerst met een eigen account in op de directory om de gebruiker te vinden. Open in Authentik **Directory > Users**, klik op **New User**, kies **Internal User** en klik op **Next**. Voer een gebruikersnaam in, bijvoorbeeld `ldapservice`, en klik op **Create**:

    <Frame caption="Authentik: het bind-account aanmaken">
      <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>

    Open de nieuwe gebruiker en klik op **Set password**. Dit wachtwoord komt in `OVERLEAF_LDAP_BIND_CREDENTIALS`:

    <div style={{ textAlign: "center" }}>
      <Frame caption="Authentik: het wachtwoord van het bind-account instellen (testinstantie)">
        <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>

    Noteer het nummer van de gebruiker in de adresbalk, bijvoorbeeld `19` in `…/#/identity/users/19`. Je hebt het nodig in stap 3.
  </Step>

  <Step title="Maak de provider en de applicatie aan">
    Open **Applications > Applications** en klik op **New Application**. De wizard maakt de applicatie en de bijbehorende provider samen aan.

    1\. Geef de applicatie een naam en een slug, bijvoorbeeld `overleaf-ldap`, en klik op **Next**:

    <Frame caption="Authentik: naam en slug van de applicatie">
      <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\. Kies **LDAP Provider** en klik op **Next**:

    <Frame caption="Authentik: de LDAP-provider kiezen">
      <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\. Stel **Bind Mode** in op **Direct binding** en **Search Mode** op **Direct querying**:

    <Frame caption="Authentik: bind- en zoekmodus van de LDAP-provider">
      <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\. Stel verderop **Bind Flow** in op `default-authentication-flow` en **Base DN** op je Base DN, bijvoorbeeld `dc=example,dc=com`:

    <Frame caption="Authentik: bind flow en Base DN van de LDAP-provider">
      <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\. Klik op **Next** tot de laatste pagina en verstuur de applicatie.
  </Step>

  <Step title="Laat het bind-account de directory doorzoeken">
    Zonder deze machtiging ziet het bind-account alleen zichzelf, vindt de zoekopdracht geen gebruiker en mislukt elke LDAP-aanmelding.

    Open de provider, ga naar **Permissions** en klik op **Assign Role Object Permission**. Typ bij **Role** het nummer uit stap 1, kies `ak-managed-role--user-<number>` en schakel daarna **Search full LDAP directory** in:

    <Frame caption="Authentik: het bind-account de zoekmachtiging geven (testinstantie)">
      <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>

    De rol toont dan een vinkje onder **Search full LDAP directory**:

    <Frame caption="Authentik: machtigingen van een LDAP-provider (testinstantie)">
      <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="Start de LDAP-outpost">
    Authentik beantwoordt LDAP via een outpost, een aparte container. Open **Applications > Outposts**, maak een outpost van het type **LDAP** aan met je provider en implementeer deze zoals Authentik beschrijft. De outpost luistert op poort 389 van de host waarop hij draait. Zodra hij verbonden is, toont hij een groen vinkje:

    <Frame caption="Authentik: een draaiende LDAP-outpost (testinstantie)">
      <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="Vul de DN's in">
    De providerpagina toont de Base DN en een voorbeeld onder **How to connect**:

    <Frame caption="Authentik: overzicht van een LDAP-provider (testinstantie)">
      <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>

    Kopieer de voorbeeldwaarden niet zoals ze zijn:

    * **Bind DN** toont het account waarmee je bent ingelogd. Gebruik in plaats daarvan het bind-account uit stap 1: `cn=ldapservice,ou=users,<Base DN>`.
    * **Search base** toont de Base DN. Gebruik `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 houdt voor elke gebruiker een groep met dezelfde naam bij onder `ou=virtual-groups`. Als je de hele Base DN doorzoekt op `(cn=alice)`, vind je zowel `cn=alice,ou=users,…` als `cn=alice,ou=virtual-groups,…`, en Overleaf weigert een aanmelding die met meer dan één item overeenkomt. Houd de search base op `ou=users,<Base DN>`.
    </Warning>
  </Step>

  <Step title="Controleer de zoekopdracht">
    Voer, voordat je Overleaf start, de zoekopdracht uit die Overleaf zal doen. Die moet precies één `dn:` tonen:

    ```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
    ```

    Helemaal geen `dn:` betekent meestal dat de machtiging uit stap 3 ontbreekt.
  </Step>

  <Step title="Koppel de beheerders (optioneel)">
    De groepen van een gebruiker staan in `memberOf`, als DN's onder `ou=groups`. Om de leden van de Authentik-groep `Admins` beheerder van Overleaf te maken:

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

    <Warning>
      De beheerdersvlag wordt bij elke LDAP-aanmelding bijgewerkt. Met een verkeerd attribuut of een verkeerde waarde verliest elke beheerder die via LDAP inlogt de beheerdersrechten. Test de koppeling eerst met een tweede beheerdersaccount.
    </Warning>
  </Step>
</Steps>

<Accordion title="Geteste variables.env voor 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.