> 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/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 aan.

{% hint style="warning" %}
Overleaf gebruikt de **passport-ldapauth** bibliotheek, die relatief verouderd is; LDAP-compatibiliteit kan niet volledig worden gegarandeerd. Bij bepaalde LDAP-identiteitsproviders (bijvoorbeeld, <https://goauthentik.io/>), kunnen inlogfouten optreden. Daarom wordt, indien mogelijk, aanbevolen om eerder OAuth/SAML 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 standaard authenticatiemethode. Wanneer een gebruiker zijn LDAP-gebruikersnaam en wachtwoord indient, controleert de backend van Overleaf de gegevens 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 te configureren `passport-ldapauth`. Als u 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 specificeert welke externe authenticatiemethoden actief zijn. De waarde van deze variabele is een lijst. Als de lijst `ldap` bevat, wordt LDAP-authenticatie geactiveerd.

Bijvoorbeeld: `EXTERNAL_AUTH=ldap saml`

Anders dan in 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` als `wachtwoord` in het inlogformulier in; wordt geprobeerd:

1. Er wordt in de LDAP-directory naar een LDAP-gebruiker gezocht met behulp van het filter dat is gedefinieerd door `OVERLEAF_LDAP_SEARCH_FILTER` en geauthenticeerd.
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 geauthenticeerde LDAP-gebruiker:
   * Als er een overeenkomende gebruiker wordt gevonden, wordt het `hashedPassword` veld voor deze gebruiker verwijderd (als het bestaat). Dit zorgt ervoor dat de gebruiker in de toekomst alleen nog via LDAP-authenticatie kan inloggen.
   * 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.

{% hint style="danger" %}
Voor gebruikers die via LDAP inloggen, slaan we geen gehashte wachtwoorden op in de Overleaf-mongodatabase (of verwijderen we bestaande).
{% 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` (onversleuteld of STARTTLS, indien geconfigureerd).
* `OVERLEAF_LDAP_IDENTITY_SERVICE_NAME`
  * Weergavenaam voor de LDAP-identiteitsdienst, 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 ten minste één e-mailadres hebben. Als meerdere adressen worden opgegeven, wordt alleen het eerste gebruikt.
* `OVERLEAF_LDAP_FIRST_NAME_ATT`
  * De eigenschapsnaam van de voornaam van de gebruiker die in de applicatie wordt gebruikt, meestal `givenName`.
* `OVERLEAF_LDAP_LAST_NAME_ATT`
  * De eigenschapsnaam van de achternaam van de gebruiker die in de applicatie wordt gebruikt, meestal `sn`.
* `OVERLEAF_LDAP_NAME_ATT`
  * De eigenschapsnaam van de volledige naam van de gebruiker, meestal `cn`. Als een van de twee vorige variabelen niet is gedefinieerd, wordt de voornaam en/of achternaam van de gebruiker uit deze variabele gehaald. Anders wordt deze niet gebruikt.
* `OVERLEAF_LDAP_PLACEHOLDER`
  * De plaatshouder voor het inlogformulier, standaard `Gebruikersnaam`.
* `OVERLEAF_LDAP_UPDATE_USER_DETAILS_ON_LOGIN`
  * Als ingesteld op `true`, werkt de LDAP-gebruiker `first_name` als `last_name` veld bij het inloggen en schakelt het gebruikersdetailformulier uit op de `/user/settings` pagina voor LDAP-gebruikers. Anders worden de gegevens alleen bij de eerste login opgehaald.
* `OVERLEAF_LDAP_BIND_DN`
  * De onderscheidende naam van de LDAP-gebruiker die moet worden gebruikt voor de LDAP-verbinding (deze gebruiker moet accounts op de LDAP-server kunnen zoeken/lijsten), bijvoorbeeld `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 waarmee de client zich bindt, standaard `dn`.
* `OVERLEAF_LDAP_SEARCH_BASE` **(vereist)**
  * De basis-DN van 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 te voegen voor de LDAP-zoekopdracht.
    * Voorbeeld: `(|(uid={{username}})(mail={{username}}))` (gebruiker kan inloggen met e-mail of met loginnaam).
    * Voorbeeld: `(sAMAccountName={{username}})` (Active Directory).
* `OVERLEAF_LDAP_SEARCH_SCOPE`
  * De scope 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 het 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`, dan worden maximaal 100 inloggegevens tegelijk 5 minuten in de cache opgeslagen.
* `OVERLEAF_LDAP_TIMEOUT`
  * Hoe lang de client bewerkingen mag laten duren voordat ze verlopen, ms (standaard: oneindig).
* `OVERLEAF_LDAP_CONNECT_TIMEOUT`
  * Hoe lang de client moet wachten voordat TCP-verbindingen verlopen, ms (standaard: OS-standaard).
* `OVERLEAF_LDAP_IS_ADMIN_ATT` als `OVERLEAF_LDAP_IS_ADMIN_ATT_VALUE`
  * Wanneer beide omgevingsvariabelen zijn ingesteld, werkt het inlogproces `user.isAdmin = true` als het LDAP-profiel het attribuut bevat dat is opgegeven door `OVERLEAF_LDAP_IS_ADMIN_ATT` en de waarde ervan ofwel overeenkomt met `OVERLEAF_LDAP_IS_ADMIN_ATT_VALUE` of een array bevat `OVERLEAF_LDAP_IS_ADMIN_ATT_VALUE`, anders `user.isAdmin` wordt ingesteld op `false`. Als een van deze variabelen niet is ingesteld, wordt de beheerdersstatus alleen ingesteld op `true` tijdens het aanmaken van een beheerdersgebruiker in Launchpad.

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

* `OVERLEAF_LDAP_CONTACTS_FILTER`
  * Het filter dat wordt gebruikt om naar gebruikers in de LDAP-server te zoeken en in contacten te laden. De plaatshouder '{{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 dit niet is gedefinieerd, worden er geen gebruikers van de LDAP-server in contacten opgehaald.
* `OVERLEAF_LDAP_CONTACTS_SEARCH_BASE`
  * Geeft de basis-DN op van waaruit het zoeken naar contactpersonen begint. Standaard op `OVERLEAF_LDAP_SEARCH_BASE`.
* `OVERLEAF_LDAP_CONTACTS_SEARCH_SCOPE`
  * De scope van de zoekopdracht kan zijn `basis`, `één`, of `sub` (standaard).
* `OVERLEAF_LDAP_CONTACTS_PROPERTY`
  * Geeft de eigenschap van het gebruikersobject op die de '{{userProperty}}'-plaatshouder in de `OVERLEAF_LDAP_CONTACTS_FILTER`.
* `OVERLEAF_LDAP_CONTACTS_NON_LDAP_VALUE`
  * Geeft de waarde van de `OVERLEAF_LDAP_CONTACTS_PROPERTY` op als de zoekopdracht wordt gestart door een niet-LDAP-gebruiker. Als deze variabele niet is gedefinieerd, zal het resulterende filter niets opleveren. De waarde `*` kan als wildcard worden gebruikt.

<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 zorgt ervoor 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 hebben.

</details>

<details>

<summary><strong>Voorbeeld van variables.env-bestand</strong></summary>

```
OVERLEAF_APP_NAME="Onze Overleaf-instantie"

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 ben 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://overleaf-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.
