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

> Benutzern die Anmeldung mit ihrem LDAP- oder Active-Directory-Konto in einem Kubernetes-Deployment ermöglichen.

Die LDAP-Anmeldung wird vom **web**-Dienst (dem `authentication`-Modul) in jedem Ayakaleaf-Pro-Pod abgewickelt. Anders als bei OIDC und SAML kommunizieren die Pods selbst mit dem Verzeichnis. Richten Sie die Verzeichnisseite wie unter [LDAP-Authentifizierung](https://ayakaleaf-pro.mintlify.site/de/on-premises/configuration/overleaf-toolkit/authentication/ldap-authentication.md) beschrieben ein und übertragen Sie die Werte dann wie unten gezeigt in Kubernetes.

### Wo was läuft

| | |
| - | - |
| Dienst | web, in jedem Ayakaleaf-Pro-Pod; Einstellungen und die CA werden beim Start von web gelesen |
| Pod → LDAP-Server | `OVERLEAF_LDAP_URL`: eine neue Verbindung für jede Anmeldung und für jede Kontaktsuche, wenn `OVERLEAF_LDAP_CONTACTS_FILTER` gesetzt ist |
| Browser → Overleaf | `GET`/`POST ${OVERLEAF_SITE_URL}/ldap/login` |
| Anmeldestatus | die Sitzung und die Ratenbegrenzungen in Redis, von allen Replikaten gemeinsam genutzt |
| Periodische Jobs | keine |

### Konfiguration

**1. Den Pods den Zugriff auf das Verzeichnis ermöglichen**

Jeder Pod, auf dem Ayakaleaf Pro läuft, öffnet die LDAP-Verbindungen. Wenn eine Firewall oder NetworkPolicy das Verzeichnis schützt, erlauben Sie die Adressen, mit denen die Pods den Cluster verlassen: üblicherweise die Adressen der Knoten oder Ihr Egress-Gateway.

Das Image enthält kein `ldapsearch`. Um die [Suchprüfung](https://ayakaleaf-pro.mintlify.site/de/on-premises/configuration/overleaf-toolkit/authentication/ldap-authentication.md#check-the-search) innerhalb des Clusters auszuführen, verwenden Sie einen Wegwerf-Pod:

```bash wrap theme={null}
kubectl -n overleaf run ldapsearch --rm -i --restart=Never --image=alpine:3.22 -- sh -c \
  "apk add -q openldap-clients && 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"
```

Er muss genau ein `dn:` ausgeben.

**2. Die Einstellungen zur ConfigMap hinzufügen**

```yaml title="30-config.yaml (additions)" 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_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"
```

Jede `OVERLEAF_LDAP_*`-Einstellung ist unter [Umgebungsvariablen](https://ayakaleaf-pro.mintlify.site/de/on-premises/configuration/overleaf-toolkit/authentication/ldap-authentication.md#environment-variables) aufgeführt. Alle gehören in die ConfigMap, außer dem Bind-Passwort. Setzen Sie `"true"`, `"false"`, JSON-Werte wie `OVERLEAF_LDAP_SEARCH_ATTRIBUTES: '["mail", "cn"]'` sowie Werte, die mit `*` beginnen, in Anführungszeichen.

**3. Das Bind-Passwort in das Secret eintragen**

```bash theme={null}
kubectl -n overleaf patch secret overleaf-secrets --type merge \
  -p '{"stringData":{"OVERLEAF_LDAP_BIND_CREDENTIALS":"<password of ldapservice>"}}'
```

**4. LDAPS oder STARTTLS mit Ihrer eigenen CA (optional)**

Legen Sie die CA in das Secret `overleaf-certs`, das unter `/var/lib/overleaf/certs` eingehängt ist (siehe [Zertifikate und andere Dateien](https://ayakaleaf-pro.mintlify.site/de/on-premises/configuration/kubernetes#zertifikate-und-andere-dateien)), und verweisen Sie darauf:

```yaml theme={null}
  OVERLEAF_LDAP_URL: ldaps://ldap.example.com:636
  OVERLEAF_LDAP_TLS_OPTS_CA_PATH: /var/lib/overleaf/certs/ldap-ca.pem
```

Die CA-Liste ersetzt für LDAP-Verbindungen die System-CAs. Sie wird beim Start von web gelesen.

**5. Anwenden und neu starten**

```bash theme={null}
kubectl apply -f 30-config.yaml
kubectl -n overleaf rollout restart deployment/overleaf     # or statefulset/overleaf
kubectl -n overleaf rollout status deployment/overleaf
```

### Mehrere Replikate

Über die Firewall aus Schritt 1 hinaus nichts weiter: Jedes Replikat verbindet sich selbstständig mit dem Verzeichnis, und das Anmeldeergebnis wird in der Sitzung in Redis gespeichert.

### Getestet auf Kubernetes

Mit dem LDAP-Outpost von goauthentik als Verzeichnis bestehen auf Kubernetes 1.37 mit drei Replikaten hinter HAProxy unsere End-to-End-Tests für LDAP (26 Fälle): die Anmeldung des ersten Administrators aus dem Launchpad über LDAP, die Anmeldung mit dem Bind-Passwort aus dem Secret, abgelehnte falsche Passwörter und unbekannte Benutzer, die Administratorzuordnung per Gruppe und ohne Zuordnung, Name und Administrator-Flag bei jeder Anmeldung aktualisiert (ein Namensattribut oder Vor- und Nachname), Verzeichniskontakte, Abmeldung, Passwortregeln für LDAP-Konten, gesperrte Konten sowie die LDAP-Anmeldung mit reCAPTCHA.

### Q\&A

> [accordion] Die LDAP-Anmeldung schlägt nur auf einigen Pods fehl
>
> **Antwort:** Das Verzeichnis ist nicht von jedem Knoten aus erreichbar. Prüfen Sie es von jedem Pod aus:
>
> ```bash theme={null}
> for p in $(kubectl -n overleaf get pod -l app=overleaf -o name); do   # app=overleaf-ha for several replicas
>   kubectl -n overleaf exec "$p" -- bash -c 'echo > /dev/tcp/ldap.example.com/389 && echo "$HOSTNAME ok"'
> done
> ```

> [accordion] Wo sehe ich, warum eine Anmeldung fehlgeschlagen ist?
>
> **Antwort:** Im web-Log des Pods, der die Anmeldung bearbeitet hat:
>
> ```bash theme={null}
> kubectl -n overleaf exec deploy/overleaf -- grep -i ldap /var/log/overleaf/web.log | tail
> ```


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.