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

# LDAP-authenticatie

Deze functie is ontwikkeld door [yu-i-i/overleaf-cep](https://github.com/yu-i-i/overleaf-cep). Hier bieden we enkele documenten voor uw configuratie.

{% hint style="warning" %}
Overleaf gebruikt de **passport-ldapauth** bibliotheek, die relatief verouderd is, kan LDAP-compatibiliteit niet volledig worden gegarandeerd. Met bepaalde LDAP-identiteitsproviders (bijvoorbeeld, <https://goauthentik.io/>), kunnen inlogfouten optreden. Daarom wordt het, indien mogelijk, aanbevolen om vooraf de OAuth/SAML-methode te gebruiken.
{% endhint %}

### Wat is LDAP

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

<figure><img src="/files/c52a62a83023b3c159f737ef13a5464799114d48" alt=""><figcaption><p>Een Server Pro-voorbeeld voor LDAP</p></figcaption></figure>

### Configuratie

Intern gebruikt Overleaf LDAP de [passport-ldapauth](https://github.com/vesse/passport-ldapauth) bibliotheek. De meeste van deze configuratieopties worden doorgegeven aan de `server` config-object dat wordt gebruikt om `passport-ldapauth`. Als u problemen heeft met het configureren van LDAP, is het de moeite waard om de README voor `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 geeft aan welke externe authenticatiemethoden zijn geactiveerd. De waarde van deze variabele is een lijst. Als de lijst `ldap` bevat, wordt LDAP-authenticatie geactiveerd.

Bijvoorbeeld: `EXTERNAL_AUTH=ldap saml`

In tegenstelling tot 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`.

Bij gebruik van LDAP-authenticatiemethoden voert een gebruiker een `gebruikersnaam` en `wachtwoord` in het inlogformulier in, dan wordt geprobeerd:

1. Er wordt in de LDAP-directory gezocht naar een LDAP-gebruiker met behulp van het filter dat is gedefinieerd door `OVERLEAF_LDAP_SEARCH_FILTER` en geverifieerd.
2. Als de authenticatie succesvol is, wordt in de Overleaf-gebruikersdatabase gezocht naar een gebruiker met het primaire e-mailadres dat overeenkomt met het e-mailadres van de geverifieerde LDAP-gebruiker:
   * Als er een overeenkomende gebruiker wordt gevonden, wordt het `hashedPassword` veld voor deze gebruiker verwijderd (indien aanwezig). Dit zorgt ervoor dat de gebruiker in de toekomst alleen via LDAP-authenticatie kan inloggen.
   * Als er geen overeenkomende gebruiker wordt gevonden, wordt een nieuwe Overleaf-gebruiker aangemaakt met behulp van het e-mailadres, de voornaam en de achternaam die van de LDAP-server zijn opgehaald.

{% hint style="danger" %}
Voor gebruikers die via LDAP inloggen, slaan we gehashte wachtwoorden niet op in de Overleaf-mongodatabase (en verwijderen we bestaande niet).
{% endhint %}

#### Omgevingsvariabelen

* `OVERLEAF_LDAP_URL` **(vereist)**
  * URL van de LDAP-server.
    * Voorbeeld: `ldaps://ldap.example.com:636` (LDAP via SSL)
    * Voorbeeld: `ldap://ldap.example.com:389` (niet-versleuteld of STARTTLS, indien geconfigureerd).
* `OVERLEAF_LDAP_IDENTITY_SERVICE_NAME`
  * Weergavenaam voor de LDAP-identiteitsservice, gebruikt op de inlogpagina.
  * Standaard `Inloggen met LDAP-provider`.
* `OVERLEAF_LDAP_EMAIL_ATT`
  * Het e-mailattribuut dat door de LDAP-server wordt geretourneerd, standaard `mail`. Elke LDAP-gebruiker moet minstens één e-mailadres hebben. Als meerdere adressen worden opgegeven, wordt alleen het eerste gebruikt.
* `OVERLEAF_LDAP_FIRST_NAME_ATT`
  * De eigenschapsnaam met de voornaam van de gebruiker, die in de toepassing wordt gebruikt, meestal `givenName`.
* `OVERLEAF_LDAP_LAST_NAME_ATT`
  * De eigenschapsnaam met de familienaam van de gebruiker, die in de toepassing wordt gebruikt, meestal `sn`.
* `OVERLEAF_LDAP_NAME_ATT`
  * De eigenschapsnaam 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 inlogformulier, standaard `Gebruikersnaam`.
* `OVERLEAF_LDAP_UPDATE_USER_DETAILS_ON_LOGIN`
  * Indien ingesteld op `true`, werkt de LDAP-gebruiker `first_name` en `last_name` veld bij het inloggen bij en schakelt het formulier met gebruikersgegevens op de `/user/settings` pagina voor LDAP-gebruikers uit. Anders worden de gegevens alleen bij de eerste login 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 doorzoeken/lijsten), bijv.  `cn=ldap_reader,dc=example,dc=com`. Als niet gedefinieerd, wordt anonieme binding gebruikt.
* `OVERLEAF_LDAP_BIND_CREDENTIALS`
  * Wachtwoord voor `OVERLEAF_LDAP_BIND_DN`.
* `OVERLEAF_LDAP_BIND_PROPERTY`
  * Eigenschap van de gebruiker waarop de client zich moet binden, standaard `dn`.
* `OVERLEAF_LDAP_SEARCH_BASE` **(vereist)**
  * De basis-DN waaruit naar gebruikers wordt gezocht. Bijvoorbeeld, `ou=people,dc=example,dc=com`.
* `OVERLEAF_LDAP_SEARCH_FILTER`
  * LDAP-zoekfilter waarmee een gebruiker wordt gevonden. Gebruik de letterlijke '{{username}}' om de opgegeven gebruikersnaam in de LDAP-zoekopdracht te laten invullen.
    * Voorbeeld: `(|(uid={{username}})(mail={{username}}))` (gebruiker kan inloggen met e-mail of met inlognaam).
    * Voorbeeld: `(sAMAccountName={{username}})` (Active Directory).
* `OVERLEAF_LDAP_SEARCH_SCOPE`
  * De reikwijdte van de zoekopdracht kan zijn `basis`, `één`, of `sub` (standaard).
* `OVERLEAF_LDAP_SEARCH_ATTRIBUTES`
  * JSON-array met attributen die van de LDAP-server moeten worden opgehaald, bijvoorbeeld `["uid", "mail", "givenName", "sn"]`. Standaard worden alle attributen opgehaald.
* `OVERLEAF_LDAP_STARTTLS`
  * Als `true`, wordt LDAP via TLS gebruikt.
* `OVERLEAF_LDAP_TLS_OPTS_CA_PATH`
  * Pad naar het bestand met het CA-certificaat dat wordt gebruikt om het SSL/TLS-certificaat van de LDAP-server te verifiëren. Als er meerdere certificaten zijn, kan dit een JSON-array van 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`
  * Als `true`, wordt het servercertificaat geverifieerd aan de hand van de lijst met opgegeven CA's.
* `OVERLEAF_LDAP_CACHE`
  * Als `true`, worden maximaal 100 inloggegevens tegelijk 5 minuten in de cache opgeslagen.
* `OVERLEAF_LDAP_TIMEOUT`
  * Hoe lang de client bewerkingen moet laten lopen voordat er een time-out optreedt, ms (standaard: oneindig).
* `OVERLEAF_LDAP_CONNECT_TIMEOUT`
  * Hoe lang de client moet wachten voordat er een time-out optreedt voor TCP-verbindingen, ms (standaard: OS-standaard).
* `OVERLEAF_LDAP_IS_ADMIN_ATT` en `OVERLEAF_LDAP_IS_ADMIN_ATT_VALUE`
  * Wanneer beide omgevingsvariabelen zijn ingesteld, werkt het inlogproces `user.isAdmin = true` bij als het LDAP-profiel het attribuut bevat dat is opgegeven door `OVERLEAF_LDAP_IS_ADMIN_ATT` en de waarde ervan overeenkomt met `OVERLEAF_LDAP_IS_ADMIN_ATT_VALUE` of een array is die bevat `OVERLEAF_LDAP_IS_ADMIN_ATT_VALUE`, anders `user.isAdmin` is ingesteld op `false`. Als een van deze variabelen niet is ingesteld, wordt de beheerdersstatus alleen ingesteld op `true` tijdens het aanmaken van een beheerder in Launchpad.

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

* `OVERLEAF_LDAP_CONTACTS_FILTER`
  * Het filter dat wordt gebruikt om naar gebruikers in de LDAP-server te zoeken die in contacten moeten worden geladen. De placeholder '{{userProperty}}' binnen het filter wordt vervangen door de waarde van de eigenschap die is opgegeven door `OVERLEAF_LDAP_CONTACTS_PROPERTY` van de LDAP-gebruiker die de zoekopdracht start. Als niet gedefinieerd, worden er geen gebruikers uit de LDAP-server in contacten opgehaald.
* `OVERLEAF_LDAP_CONTACTS_SEARCH_BASE`
  * Specificeert de basis-DN waaruit moet worden begonnen met zoeken naar de contacten. Standaard `OVERLEAF_LDAP_SEARCH_BASE`.
* `OVERLEAF_LDAP_CONTACTS_SEARCH_SCOPE`
  * De reikwijdte van de zoekopdracht kan zijn `basis`, `één`, of `sub` (standaard).
* `OVERLEAF_LDAP_CONTACTS_PROPERTY`
  * Specificeert de eigenschap van het gebruikersobject die de placeholder '{{userProperty}}' zal vervangen in de `OVERLEAF_LDAP_CONTACTS_FILTER`.
* `OVERLEAF_LDAP_CONTACTS_NON_LDAP_VALUE`
  * Specificeert de waarde van de `OVERLEAF_LDAP_CONTACTS_PROPERTY` als de zoekopdracht wordt gestart door een niet-LDAP-gebruiker. Als deze variabele niet is gedefinieerd, komt het resulterende filter op niets uit. De waarde `*` kan worden gebruikt als een jokerteken.

<details>

<summary><strong>Voorbeeld</strong></summary>

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

Het bovenstaande voorbeeld resulteert erin dat in de contacten van de huidige LDAP-gebruiker alle LDAP-gebruikers worden geladen die dezelfde UNIX `gid`. Niet-LDAP-gebruikers zullen alle LDAP-gebruikers met UNIX `gid=1000` in hun contacten.

</details>

<details>

<summary><strong>Voorbeeldbestand variables.env</strong></summary>

```
OVERLEAF_APP_NAME="Our Overleaf Instance"

ENABLED_LINKED_FILE_TYPES=project_file,project_output_file,url

# Schakelt het genereren van miniaturen in met ImageMagick
ENABLE_CONVERSIONS=true

# Schakelt de vereiste voor e-mailbevestiging uit
EMAIL_CONFIRMATION_DISABLED=true

## Nginx
# NGINX_WORKER_PROCESSES=4
# NGINX_WORKER_CONNECTIONS=768

## Instellen voor TLS via nginx-proxy
# OVERLEAF_BEHIND_PROXY=true
# OVERLEAF_SECURE_COOKIE=true

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

OVERLEAF_LEFT_FOOTER=[{"text": "Neem contact op met uw supportteam", "url": "mailto:support@example.com"}]
OVERLEAF_RIGHT_FOOTER=[{"text":"Hallo, ik sta aan de rechterkant", "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=Dit systeem wordt beheerd door afdeling x

OVERLEAF_PROXY_LEARN=true
NAV_HIDE_POWERED_BY=true

#################
## LDAP voor 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='Gebruikersnaam of e-mailadres'

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/nl/configuratie/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.
