> 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/oidc-authentication.md).

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

### Konfiguration

Intern verwendet das Overleaf-OIDC-Modul die [passport-openidconnect](https://github.com/jaredhanson/passport-openidconnect) Bibliothek. Wenn Sie Probleme bei der Konfiguration von OpenID Connect haben, lohnt es sich, die README für `passport-openidconnect` zu lesen, um ein Gefühl für die erwartete Konfiguration zu bekommen.

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

Zum Beispiel: `EXTERNAL_AUTH=ldap oidc`

Bei Verwendung der OIDC-Authentifizierungsmethode wird ein Benutzer zur Authentifizierungsseite des Identity Providers (IdP) weitergeleitet. Wenn der IdP den Benutzer erfolgreich authentifiziert, wird in der Overleaf-Benutzerdatenbank nach einem Datensatz gesucht, der ein `thirdPartyIdentifiers` Feld in folgender Struktur:

```
thirdPartyIdentifiers: [
  {
    externalUserId: "...",
    externalData: null,
    providerId: "..."
  }
]
```

Das `externalUserId` muss mit der Benutzer-ID im vom IdP-Server zurückgegebenen Profil übereinstimmen (siehe `OVERLEAF_OIDC_USER_ID_FIELD` Umgebungsvariable), und `providerId` muss mit der ID des OIDC-Providers übereinstimmen (siehe `OVERLEAF_OIDC_PROVIDER_ID`).

Wenn kein passender Datensatz gefunden wird, wird die Datenbank nach einem Benutzer mit der primären E-Mail-Adresse durchsucht, die mit der E-Mail im IdP-Benutzerprofil übereinstimmt:

* Wenn ein solcher Benutzer gefunden wird, wird das `thirdPartyIdentifiers` Feld aktualisiert.
* Wenn kein passender Benutzer gefunden wird und die JIT-Kontenerstellung nicht deaktiviert ist, wird ein neuer Benutzer mit der E-Mail-Adresse und `thirdPartyIdentifiers` aus dem IdP-Profil erstellt.

In beiden Fällen gilt der Benutzer als mit dem externen OIDC-Benutzer 'verknüpft'. Die Verknüpfung des Benutzers mit dem OIDC-Provider kann auf der `/user/settings` Seite.

#### Umgebungsvariablen

Die Werte der folgenden fünf erforderlichen Variablen können mithilfe von `.well-known/openid-configuration` Endpunkt Ihres OpenID Providers (OP) gefunden werden.

* `OVERLEAF_OIDC_ISSUER` **(erforderlich)**
* `OVERLEAF_OIDC_AUTHORIZATION_URL` **(erforderlich)**
* `OVERLEAF_OIDC_TOKEN_URL` **(erforderlich)**
* `OVERLEAF_OIDC_USER_INFO_URL` **(erforderlich)**
* `OVERLEAF_OIDC_LOGOUT_URL` **(erforderlich)**

Die Werte der folgenden zwei erforderlichen Variablen werden vom Administrator Ihres OP bereitgestellt

* `OVERLEAF_OIDC_CLIENT_ID` **(erforderlich)**
* `OVERLEAF_OIDC_CLIENT_SECRET` **(erforderlich)**
* `OVERLEAF_OIDC_SCOPE`
  * Standard: `openid profile email`
* `OVERLEAF_OIDC_PROVIDER_ID`
  * Beliebige ID des OP, standardmäßig `oidc`.
* `OVERLEAF_OIDC_PROVIDER_NAME`
  * Der Name des OP, verwendet auf der `Verknüpfte Konten` Abschnitt der `/user/settings` Seite, standardmäßig `OIDC-Provider`.
* `OVERLEAF_OIDC_IDENTITY_SERVICE_NAME`
  * Anzeigename für den Identitätsdienst, verwendet auf der Anmeldeseite (Standard: `Mit $OVERLEAF_OIDC_PROVIDER_NAME anmelden`).
* `OVERLEAF_OIDC_PROVIDER_DESCRIPTION`
  * Beschreibung des OP, verwendet im `Verknüpfte Konten` Abschnitt (Standard: `Mit $OVERLEAF_OIDC_PROVIDER_NAME anmelden`).
* `OVERLEAF_OIDC_PROVIDER_INFO_LINK`
  * `Mehr erfahren` URL in der OP-Beschreibung, Standard: kein `Mehr erfahren` Link in der Beschreibung.
* `OVERLEAF_OIDC_PROVIDER_HIDE_NOT_LINKED`
  * OP nicht auf der `/user/settings` Seite anzeigen, wenn das Benutzerkonto nicht mit dem OP verknüpft ist, Standard `false`.
* `OVERLEAF_OIDC_USER_ID_FIELD`
  * Der Wert dieses Attributs wird von Overleaf als externe Benutzer-ID verwendet, standardmäßig `id`. Weitere mögliche sinnvolle Werte sind `email` und `Benutzernamen` (entsprechend `preferred_username` OIDC-Claim).
* `OVERLEAF_OIDC_ALLOWED_EMAIL_DOMAINS`
  * Beschränkt die Just-in-Time-(JIT-)Kontenerstellung für Benutzer, die sich über OIDC authentifizieren. Wenn sie auf eine kommaseparierte Liste von Domainnamen gesetzt ist, wird nur dann ein neues Konto erstellt, wenn die Domain der E-Mail-Adresse des Benutzers mit einer der aufgeführten Domains übereinstimmt. Wenn die Domain nicht übereinstimmt, muss ein Administrator das Benutzerkonto manuell unter Verwendung der E-Mail-Adresse des OIDC-Benutzers erstellen, entweder mit einem starken zufälligen Passwort oder, vorzugsweise, ohne das `hashedPassword` Feld überhaupt. Domainnamen können einen führenden `*.` Platzhalter zur Übereinstimmung mit Subdomains enthalten.
    * Beispiel: Um die JIT-Kontenerstellung für Benutzer mit E-Mail-Adressen wie `name@example.com` und `name@math.example.com`:\
      `OVERLEAF_OIDC_ALLOWED_EMAIL_DOMAINS=example.com, *.example.com`
    * Beispiel: Um die JIT-Kontenerstellung vollständig zu deaktivieren:\
      `OVERLEAF_OIDC_ALLOWED_EMAIL_DOMAINS=`
* `OVERLEAF_OIDC_UPDATE_USER_DETAILS_ON_LOGIN`
  * Wenn gesetzt auf `true`, aktualisiert das Benutzer `Vorname` und `Nachname` Feld bei der Anmeldung und deaktiviert das Formular mit den Benutzerdetails auf `/user/settings` Seite.
* `OVERLEAF_OIDC_IS_ADMIN_FIELD` und `OVERLEAF_OIDC_IS_ADMIN_FIELD_VALUE`
  * Wenn beide Umgebungsvariablen gesetzt sind, aktualisiert der Anmeldeprozess `user.isAdmin = true` wenn das vom OP zurückgegebene Profil das durch `OVERLEAF_OIDC_IS_ADMIN_FIELD` angegebene Attribut enthält und sein Wert mit `OVERLEAF_OIDC_IS_ADMIN_FIELD_VALUE`, andernfalls `user.isAdmin` wird gesetzt auf `false`. Wenn `OVERLEAF_OIDC_IS_ADMIN_FIELD` ist `email` dann wird der Wert des Attributs `emails[0].value` für den Abgleich verwendet.

Die Weiterleitungs-URL für Ihren OpenID Provider ist `https://my-overleaf-instance.com/oidc/login/callback`.

<details>

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

{% code title="variables.env" overflow="wrap" %}

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

#################
## OIDC für CE ##
#################

EXTERNAL_AUTH=oidc

OVERLEAF_OIDC_PROVIDER_ID=oidc
OVERLEAF_OIDC_ISSUER=https://keycloak.provider.com/realms/example
OVERLEAF_OIDC_AUTHORIZATION_URL=https://keycloak.provider.com/realms/example/protocol/openid-connect/auth
OVERLEAF_OIDC_TOKEN_URL=https://keycloak.provider.com/realms/example/protocol/openid-connect/token
OVERLEAF_OIDC_USER_INFO_URL=https://keycloak.provider.com/realms/example/protocol/openid-connect/userinfo
OVERLEAF_OIDC_LOGOUT_URL=https://keycloak.provider.com/realms/example/protocol/openid-connect/logout
OVERLEAF_OIDC_CLIENT_ID=Overleaf-OIDC
OVERLEAF_OIDC_CLIENT_SECRET=DoNotUseThisATGgaAcTgCcATgGATTACAagGtTCaGcGTAG
OVERLEAF_OIDC_IDENTITY_SERVICE_NAME='Mit Keycloak OIDC-Provider anmelden'
OVERLEAF_OIDC_PROVIDER_NAME=OIDC Keycloak Provider
OVERLEAF_OIDC_PROVIDER_INFO_LINK=https://openid.net
OVERLEAF_OIDC_IS_ADMIN_FIELD=email
OVERLEAF_OIDC_IS_ADMIN_FIELD_VALUE=overleaf.admin@example.com
OVERLEAF_OIDC_UPDATE_USER_DETAILS_ON_LOGIN=false
```

{% endcode %}

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