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

# LDAP-Authentifizierung

Diese Funktion wurde entwickelt von [yu-i-i/overleaf-cep](https://github.com/yu-i-i/overleaf-cep). Hier bieten wir einige Dokumente für Ihre Konfiguration an.

{% hint style="warning" %}
Overleaf verwendet die **passport-ldapauth** Bibliothek, die relativ veraltet ist, kann die LDAP-Kompatibilität nicht vollständig garantiert werden. Bei bestimmten LDAP-Identity-Providern (zum Beispiel, <https://goauthentik.io/>), kann es zu Anmeldefehlern kommen. Daher wird empfohlen, wenn möglich, zuvor die OAuth/SAML-Methode zu verwenden.
{% endhint %}

### Was ist LDAP

LDAP ist ein Authentifizierungsprotokoll, das zur externen Identitätsprüfung verwendet wird. Overleaf Server Pro bietet in der Weboberfläche ein eigenes LDAP-Anmeldeformular, getrennt von der Standard-Authentifizierungsmethode. Wenn ein Benutzer seinen LDAP-Benutzernamen und sein Passwort eingibt, überprüft das Overleaf-Backend die Anmeldedaten gegen den konfigurierten LDAP-Server, zum Beispiel `ldap://ldap:10389`.

<figure><img src="/files/a13ed3a82bb6b84aa283649cdc7303c7f5198732" alt=""><figcaption><p>Ein LDAP-Beispiel in Server Pro</p></figcaption></figure>

### Konfiguration

Intern verwendet Overleaf LDAP die [passport-ldapauth](https://github.com/vesse/passport-ldapauth) Bibliothek. Die meisten dieser Konfigurationsoptionen werden an das `Server` Config-Objekt übergeben, das zur Konfiguration verwendet wird `passport-ldapauth`. Wenn Sie Probleme bei der Konfiguration von LDAP haben, lohnt es sich, die README für `passport-ldapauth` zu lesen, um ein Gefühl für die erwartete Konfiguration zu bekommen.

Die Umgebungsvariable `EXTERNAL_AUTH` ist erforderlich, um das LDAP-Authentifizierungsmodul zu aktivieren. Diese Umgebungsvariable legt fest, welche externen Authentifizierungsmethoden aktiviert sind. Der Wert dieser Variable ist eine Liste. Wenn die Liste `ldap` enthält, wird die LDAP-Authentifizierung aktiviert.

Zum Beispiel: `EXTERNAL_AUTH=ldap saml`

Anders als bei Overleaf CEP beschränken wir in unserer ayaka-notes-Edition die LDAP-Authentifizierung auf eine reine Authentifizierungsmethode, die unter `http://your-overleaf.com/ldap/login`.

Bei der Verwendung von LDAP-Authentifizierungsmethoden gibt ein Benutzer einen `Benutzernamen` und `Passwort` in das Anmeldeformular ein, dann wird versucht:

1. Ein LDAP-Benutzer wird im LDAP-Verzeichnis mithilfe des durch `OVERLEAF_LDAP_SEARCH_FILTER` definierten Filters gesucht und authentifiziert.
2. Wenn die Authentifizierung erfolgreich ist, wird in der Overleaf-Benutzerdatenbank nach einem Benutzer mit der primären E-Mail-Adresse gesucht, die mit der E-Mail-Adresse des authentifizierten LDAP-Benutzers übereinstimmt:
   * Wenn ein passender Benutzer gefunden wird, wird das Feld `hashedPassword` für diesen Benutzer gelöscht (falls es existiert). Dadurch wird sichergestellt, dass der Benutzer künftig nur noch per LDAP-Authentifizierung anmelden kann.
   * Wenn kein passender Benutzer gefunden wird, wird ein neuer Overleaf-Benutzer mit der vom LDAP-Server abgerufenen E-Mail-Adresse, dem Vornamen und dem Nachnamen erstellt.

{% hint style="danger" %}
Für Benutzer, die sich per LDAP anmelden, speichern wir gehashte Passwörter in der Overleaf-mongo-Datenbank nicht (bzw. entfernen bereits vorhandene).
{% endhint %}

#### Umgebungsvariablen

* `OVERLEAF_LDAP_URL` **(erforderlich)**
  * URL des LDAP-Servers.
    * Beispiel: `ldaps://ldap.example.com:636` (LDAP über SSL)
    * Beispiel: `ldap://ldap.example.com:389` (unverschlüsselt oder STARTTLS, falls konfiguriert).
* `OVERLEAF_LDAP_IDENTITY_SERVICE_NAME`
  * Anzeigename für den LDAP-Identitätsdienst, der auf der Anmeldeseite verwendet wird.
  * Standardmäßig `Mit dem LDAP-Anbieter anmelden`.
* `OVERLEAF_LDAP_EMAIL_ATT`
  * Das vom LDAP-Server zurückgegebene E-Mail-Attribut, Standard `mail`. Jeder LDAP-Benutzer muss mindestens eine E-Mail-Adresse haben. Wenn mehrere Adressen angegeben sind, wird nur die erste verwendet.
* `OVERLEAF_LDAP_FIRST_NAME_ATT`
  * Der Name der Eigenschaft, die den Vornamen des Benutzers enthält, der in der Anwendung verwendet wird, normalerweise `givenName`.
* `OVERLEAF_LDAP_LAST_NAME_ATT`
  * Der Name der Eigenschaft, die den Nachnamen des Benutzers enthält, der in der Anwendung verwendet wird, normalerweise `sn`.
* `OVERLEAF_LDAP_NAME_ATT`
  * Der Name der Eigenschaft, die den vollständigen Namen des Benutzers enthält, normalerweise `cn`. Wenn eine der beiden vorherigen Variablen nicht definiert ist, werden der Vor- und/oder Nachname des Benutzers aus dieser Variable extrahiert. Andernfalls wird sie nicht verwendet.
* `OVERLEAF_LDAP_PLACEHOLDER`
  * Der Platzhalter für das Anmeldeformular, Standard ist `Benutzername`.
* `OVERLEAF_LDAP_UPDATE_USER_DETAILS_ON_LOGIN`
  * Wenn gesetzt auf `true`, aktualisiert das LDAP-Benutzer- `Vorname` und `Nachname` Feld beim Anmelden und schaltet das Formular für Benutzerdetails auf der `/user/settings` Seite für LDAP-Benutzer aus. Andernfalls werden die Details nur beim ersten Login abgerufen.
* `OVERLEAF_LDAP_BIND_DN`
  * Der Distinguished Name des LDAP-Benutzers, der für die LDAP-Verbindung verwendet werden soll (dieser Benutzer sollte in der Lage sein, Konten auf dem LDAP-Server zu suchen/aufzulisten), z. B. `cn=ldap_reader,dc=example,dc=com`. Wenn nicht definiert, wird anonymes Binden verwendet.
* `OVERLEAF_LDAP_BIND_CREDENTIALS`
  * Passwort für `OVERLEAF_LDAP_BIND_DN`.
* `OVERLEAF_LDAP_BIND_PROPERTY`
  * Eigenschaft des Benutzers, gegen die sich der Client bindet, Standard ist `dn`.
* `OVERLEAF_LDAP_SEARCH_BASE` **(erforderlich)**
  * Die Basis-DN, ab der nach Benutzern gesucht wird. Z. B. `ou=people,dc=example,dc=com`.
* `OVERLEAF_LDAP_SEARCH_FILTER`
  * LDAP-Suchfilter, mit dem ein Benutzer gefunden wird. Verwenden Sie den Literalwert '{{username}}', damit der angegebene Benutzername in die LDAP-Suche eingesetzt wird.
    * Beispiel: `(|(uid={{username}})(mail={{username}}))` (Benutzer kann sich mit E-Mail oder Anmeldename anmelden).
    * Beispiel: `(sAMAccountName={{username}})` (Active Directory).
* `OVERLEAF_LDAP_SEARCH_SCOPE`
  * Der Suchbereich kann `base`, `one`, oder `sub` (Standard).
* `OVERLEAF_LDAP_SEARCH_ATTRIBUTES`
  * JSON-Array von Attributen, die vom LDAP-Server abgerufen werden sollen, z. B. `["uid", "mail", "givenName", "sn"]`. Standardmäßig werden alle Attribute abgerufen.
* `OVERLEAF_LDAP_STARTTLS`
  * Wenn `true`, wird LDAP über TLS verwendet.
* `OVERLEAF_LDAP_TLS_OPTS_CA_PATH`
  * Pfad zur Datei mit dem CA-Zertifikat, das zur Überprüfung des SSL/TLS-Zertifikats des LDAP-Servers verwendet wird. Wenn es mehrere Zertifikate gibt, kann es sich um ein JSON-Array von Pfaden zu den Zertifikaten handeln. Die Dateien müssen für den Docker-Container zugänglich sein.
    * Beispiel (ein Zertifikat): `/var/lib/overleaf/certs/ldap_ca_cert.pem`
    * Beispiel (mehrere Zertifikate): `["/var/lib/overleaf/certs/ldap_ca_cert1.pem", "/var/lib/overleaf/certs/ldap_ca_cert2.pem"]`
* `OVERLEAF_LDAP_TLS_OPTS_REJECT_UNAUTH`
  * Wenn `true`, wird das Serverzertifikat anhand der Liste der bereitgestellten CAs überprüft.
* `OVERLEAF_LDAP_CACHE`
  * Wenn `true`, werden bis zu 100 Anmeldedaten gleichzeitig für 5 Minuten zwischengespeichert.
* `OVERLEAF_LDAP_TIMEOUT`
  * Wie lange der Client Operationen vor einem Timeout laufen lassen soll, ms (Standard: Unendlich).
* `OVERLEAF_LDAP_CONNECT_TIMEOUT`
  * Wie lange der Client vor einem Timeout bei TCP-Verbindungen warten soll, ms (Standard: Betriebssystemstandard).
* `OVERLEAF_LDAP_IS_ADMIN_ATT` und `OVERLEAF_LDAP_IS_ADMIN_ATT_VALUE`
  * Wenn beide Umgebungsvariablen gesetzt sind, aktualisiert der Anmeldeprozess `user.isAdmin = true` wenn das LDAP-Profil das durch `OVERLEAF_LDAP_IS_ADMIN_ATT` angegebene Attribut enthält und dessen Wert entweder `OVERLEAF_LDAP_IS_ADMIN_ATT_VALUE` entspricht oder ein Array ist, das `OVERLEAF_LDAP_IS_ADMIN_ATT_VALUE`, andernfalls `user.isAdmin` wird gesetzt auf `false`. Wenn eine dieser Variablen nicht gesetzt ist, dann wird der Admin-Status nur auf `true` beim Erstellen eines Admin-Benutzers in Launchpad gesetzt.

Die folgenden fünf Variablen werden verwendet, um zu konfigurieren, wie Benutzerkontakte vom LDAP-Server abgerufen werden.

* `OVERLEAF_LDAP_CONTACTS_FILTER`
  * Der Filter, der verwendet wird, um nach Benutzern auf dem LDAP-Server zu suchen, die in Kontakte geladen werden sollen. Der Platzhalter '{{userProperty}}' innerhalb des Filters wird durch den Wert der Eigenschaft ersetzt, die von `OVERLEAF_LDAP_CONTACTS_PROPERTY` des vom Suchvorgang initiierenden LDAP-Benutzers angegeben wird. Wenn nicht definiert, werden keine Benutzer vom LDAP-Server in die Kontakte übernommen.
* `OVERLEAF_LDAP_CONTACTS_SEARCH_BASE`
  * Gibt die Basis-DN an, ab der mit der Suche nach den Kontakten begonnen werden soll. Standardmäßig `OVERLEAF_LDAP_SEARCH_BASE`.
* `OVERLEAF_LDAP_CONTACTS_SEARCH_SCOPE`
  * Der Suchbereich kann `base`, `one`, oder `sub` (Standard).
* `OVERLEAF_LDAP_CONTACTS_PROPERTY`
  * Gibt die Eigenschaft des Benutzerobjekts an, die den Platzhalter '{{userProperty}}' im `OVERLEAF_LDAP_CONTACTS_FILTER`.
* `OVERLEAF_LDAP_CONTACTS_NON_LDAP_VALUE`
  * Gibt den Wert von `OVERLEAF_LDAP_CONTACTS_PROPERTY` an, wenn die Suche von einem Nicht-LDAP-Benutzer initiiert wird. Wenn diese Variable nicht definiert ist, wird der resultierende Filter nichts finden. Der Wert `*` kann als Platzhalter verwendet werden.

<details>

<summary><strong>Beispiel</strong></summary>

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

Das obige Beispiel führt dazu, dass in die Kontakte des aktuellen LDAP-Benutzers alle LDAP-Benutzer geladen werden, die denselben UNIX- `gid`. Nicht-LDAP-Benutzer haben alle LDAP-Benutzer mit UNIX- `gid=1000` in ihren Kontakten.

</details>

<details>

<summary><strong>Beispielhafte variables.env-Datei</strong></summary>

```
OVERLEAF_APP_NAME="Unsere Overleaf-Instanz"

ENABLED_LINKED_FILE_TYPES=project_file,project_output_file,url

# Aktiviert die Erzeugung von Vorschaubildern mit ImageMagick
ENABLE_CONVERSIONS=true

# Deaktiviert die Anforderung einer E-Mail-Bestätigung
EMAIL_CONFIRMATION_DISABLED=true

## Nginx
# NGINX_WORKER_PROCESSES=4
# NGINX_WORKER_CONNECTIONS=768

## Für TLS über nginx-proxy festlegen
# OVERLEAF_BEHIND_PROXY=true
# OVERLEAF_SECURE_COOKIE=true

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

OVERLEAF_LEFT_FOOTER=[{"text": "Kontaktieren Sie Ihr Support-Team", "url": "mailto:support@example.com"}]
OVERLEAF_RIGHT_FOOTER=[{"text":"Hallo, ich bin auf der rechten Seite", "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=Dieses System wird von Abteilung x betrieben

OVERLEAF_PROXY_LEARN=true
NAV_HIDE_POWERED_BY=true

#################
## LDAP für 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='Benutzername oder E-Mail-Adresse'

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/de/konfiguration/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.
