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

# SAML-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 benutzt das Overleaf-SAML-Modul die [passport-saml](https://github.com/node-saml/passport-saml) Bibliothek; die meisten der folgenden Konfigurationsoptionen werden an `passport-saml`. Wenn Sie Probleme bei der Konfiguration von SAML haben, lohnt es sich, die README für `passport-saml` zu lesen, um ein Gefühl für die erwartete Konfiguration zu bekommen.

Die Umgebungsvariable `EXTERNAL_AUTH` wird benötigt, um das SAML-Authentifizierungsmodul zu aktivieren. Diese Umgebungsvariable legt fest, welche externen Authentifizierungsmethoden aktiviert sind. Der Wert dieser Variablen ist eine Liste. Wenn die Liste `saml` enthält, wird die SAML-Authentifizierung aktiviert.

Zum Beispiel: `EXTERNAL_AUTH=ldap saml`

Bei Verwendung der SAML-Authentifizierung wird ein Benutzer zur Authentifizierungsseite des Identity Providers (IdP) weitergeleitet. Wenn der IdP den Benutzer erfolgreich authentifiziert, wird in der Overleaf-Benutzerdatenbank nach einem Eintrag gesucht, der ein `samlIdentifiers` Feld mit folgender Struktur enthält:

```json
samlIdentifiers: [
  {
    externalUserId: "...",
    providerId: "1",
    userIdAttribute: "..."
  }
]
```

Die `externalUserId` muss dem Wert der Eigenschaft entsprechen, die durch `userIdAttribute` im vom IdP-Server zurückgegebenen Benutzerprofil.

Wenn kein übereinstimmender Datensatz gefunden wird, wird in der Datenbank nach einem Benutzer gesucht, dessen primäre E-Mail-Adresse mit der E-Mail im Benutzerprofil des IdP übereinstimmt:

* Wenn ein solcher Benutzer gefunden wird, wird die `hashedPassword` Das Feld wird gelöscht, um die lokale Authentifizierung zu deaktivieren, und das `samlIdentifiers` Feld wird hinzugefügt.
* Wenn kein passender Benutzer gefunden wird, wird ein neuer Benutzer mit der E-Mail-Adresse und `samlIdentifiers` aus dem IdP-Profil erstellt.

**Hinweis:** Derzeit wird nur ein SAML-IdP unterstützt. Das `providerId` Feld in `samlIdentifiers` ist fest auf `'1'`.

#### Umgebungsvariablen

* `OVERLEAF_SAML_IDENTITY_SERVICE_NAME`
  * Anzeigename für den Identitätsdienst, verwendet auf der Anmeldeseite (Standard: `Mit SAML IdP anmelden`).
* `OVERLEAF_SAML_USER_ID_FIELD`
  * Der Wert dieses Attributs wird von Overleaf als externe Benutzer-ID verwendet, Standard ist `nameID`.
* `OVERLEAF_SAML_EMAIL_FIELD`
  * Name des E-Mail-Felds im Benutzerprofil, Standardwert: `nameID`.
* `OVERLEAF_SAML_FIRST_NAME_FIELD`
  * Name des firstName-Felds im Benutzerprofil, Standardwert: `givenName`.
* `OVERLEAF_SAML_LAST_NAME_FIELD`
  * Name des lastName-Felds im Benutzerprofil, Standardwert: `lastName`
* `OVERLEAF_SAML_UPDATE_USER_DETAILS_ON_LOGIN`
  * Wenn auf `true`, aktualisiert beim Anmelden die Benutzer `first_name` und `last_name` das Feld bei der Anmeldung aktualisieren und das Formular für Benutzerdetails auf `/user/settings` Seite.
* `OVERLEAF_SAML_ENTRYPOINT` **(erforderlich)**
  * Eintritts-URL für den SAML-Identity-Service.
    * Beispiel: `https://idp.example.com/simplesaml/saml2/idp/SSOService.php`
    * Azure-Beispiel: `https://login.microsoftonline.com/8b26b46a-6dd3-45c7-a104-f883f4db1f6b/saml2`
* `OVERLEAF_SAML_ISSUER` **(erforderlich)**
  * Der Name des Ausstellers.
* `OVERLEAF_SAML_AUDIENCE`
  * Erwartetes Audience der SAML-Antwort, Standardwert: `OVERLEAF_SAML_ISSUER`.
* `OVERLEAF_SAML_IDP_CERT` **(erforderlich)**
  * Pfad zu einer Datei mit dem öffentlichen Zertifikat des Identity Providers, das zur Validierung der Signaturen eingehender SAML-Antworten verwendet wird. Wenn der Identity Provider mehrere gültige Signaturzertifikate hat, kann dies ein JSON-Array von Pfaden zu den Zertifikaten sein.
    * Beispiel (ein Zertifikat): `/var/lib/overleaf/certs/idp_cert.pem`
    * Beispiel (mehrere Zertifikate): `["var/lib/overleaf/certs/idp_cert.pem", "/var/lib/overleaf/certs/idp_cert_old.pem"]`
* `OVERLEAF_SAML_PUBLIC_CERT`
  * Pfad zu einer Datei mit dem öffentlichen Signaturzertifikat, das in Auth-Anfragen eingebettet wird, damit der IdP die Signaturen der eingehenden SAML-Anfrage validieren kann. Es wird benötigt, wenn das [Metadaten-Endpunkt](https://github.com/yu-i-i/overleaf-cep/wiki/Extended-CE:-SAML-Authentication#metadata-for-the-identity-provider) verwendet wird, wenn die Strategie mit einem `OVERLEAF_SAML_PRIVATE_KEY`. Zur Unterstützung der Zertifikatsrotation kann ein JSON-Array von Zertifikatspfaden angegeben werden. Wenn ein Array von Zertifikaten angegeben wird, sollte der erste Eintrag im Array dem aktuellen `OVERLEAF_SAML_PRIVATE_KEY`. Zusätzliche Einträge im Array können verwendet werden, um kommende Zertifikate vor einer Änderung des aktuellen den IdPs bereitzustellen `OVERLEAF_SAML_PRIVATE_KEY`.
* `OVERLEAF_SAML_PRIVATE_KEY`
  * Pfad zu einer Datei mit einem PEM-formatierten privaten Schlüssel, der dem `OVERLEAF_SAML_PUBLIC_CERT` entspricht und zum Signieren von Auth-Anfragen verwendet wird, die von passport-saml gesendet werden.
* `OVERLEAF_SAML_DECRYPTION_CERT`
  * Pfad zu einer Datei mit dem öffentlichen Zertifikat, das für den [Metadaten-Endpunkt](https://github.com/yu-i-i/overleaf-cep/wiki/Extended-CE:-SAML-Authentication#metadata-for-the-identity-provider).
* `OVERLEAF_SAML_DECRYPTION_PVK`
  * Pfad zu einer Datei mit dem privaten Schlüssel, der dem `OVERLEAF_SAML_DECRYPTION_CERT` entspricht und zum Entschlüsseln aller empfangenen verschlüsselten Assertions verwendet wird.
* `OVERLEAF_SAML_SIGNATURE_ALGORITHM`
  * Optional den Signaturalgorithmus für das Signieren von Anfragen festlegen, gültige Werte sind 'sha1' (Standard), 'sha256' (bevorzugt), 'sha512' (am sichersten, prüfen Sie, ob Ihr IdP dies unterstützt).
* `OVERLEAF_SAML_ADDITIONAL_PARAMS`
  * JSON-Wörterbuch zusätzlicher Query-Parameter, die allen Anfragen hinzugefügt werden.
* `OVERLEAF_SAML_ADDITIONAL_AUTHORIZE_PARAMS`
  * JSON-Wörterbuch zusätzlicher Query-Parameter, die 'authorize'-Anfragen hinzugefügt werden.
    * Beispiel: `{"some_key": "some_value"}`
* `OVERLEAF_SAML_IDENTIFIER_FORMAT`
  * Name-Identifier-Format, das beim Identity Provider angefordert werden soll (Standard: `urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress`). Bei Verwendung von `urn:oasis:names:tc:SAML:2.0:nameid-format:persistent`, stellen Sie sicher, dass die `OVERLEAF_SAML_EMAIL_FIELD` Umgebungsvariable definiert ist. Wenn `urn:oasis:names:tc:SAML:2.0:nameid-format:transient` erforderlich ist, müssen Sie auch die `OVERLEAF_SAML_ID_FIELD` Umgebungsvariable definieren, die beispielsweise auf die E-Mail-Adresse des Benutzers gesetzt werden kann.
* `OVERLEAF_SAML_ACCEPTED_CLOCK_SKEW_MS`
  * Zeit in Millisekunden der zulässigen Abweichung zwischen Client und Server beim Prüfen der Gültigkeit der Zeitstempel der Assertion-Bedingungen OnBefore und NotOnOrAfter. Bei Setzen auf -1 wird die Prüfung dieser Bedingungen vollständig deaktiviert. Standardwert ist 0.
* `OVERLEAF_SAML_ATTRIBUTE_CONSUMING_SERVICE_INDEX`
  * `AttributeConsumingServiceIndex` Attribut, das zu AuthnRequest hinzugefügt wird, um den IdP anzuweisen, welchen Attributsatz er an die Antwort anhängen soll ([Link](http://blog.aniljohn.com/2014/01/data-minimization-front-channel-saml-attribute-requests.html)).
* `OVERLEAF_SAML_AUTHN_CONTEXT`
  * JSON-Array von Werten des Name-Identifier-Formats, um den Authentifizierungskontext anzufordern. Standard: `["urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport"]`.
* `OVERLEAF_SAML_FORCE_AUTHN`
  * Wenn `true`, fordert die erste SAML-Anfrage des Dienstanbieters an, dass der IdP den Benutzer erneut authentifizieren soll, selbst wenn er über eine gültige Sitzung verfügt.
* `OVERLEAF_SAML_DISABLE_REQUESTED_AUTHN_CONTEXT`
  * Wenn `true`, fordern Sie keinen bestimmten Authentifizierungskontext an. Sie können dies beispielsweise auf `true` setzen, um zusätzliche Kontexte wie passwortlose Anmeldungen zu ermöglichen (`urn:oasis:names:tc:SAML:2.0:ac:classes:X509`). Die Unterstützung zusätzlicher Kontexte hängt von Ihrem IdP ab.
* `OVERLEAF_SAML_AUTHN_REQUEST_BINDING`
  * Wenn auf `HTTP-POST`, wird die Authentifizierung vom IdP über HTTP-POST-Bindung angefordert, andernfalls ist standardmäßig HTTP-Redirect.
* `OVERLEAF_SAML_VALIDATE_IN_RESPONSE_TO`
  * Wenn `immer`, wird InResponseTo aus eingehenden SAML-Antworten validiert.
  * Wenn `niemals`, dann wird InResponseTo nicht validiert (Standard).
  * Wenn `falls vorhanden`, dann wird InResponseTo nur validiert, wenn es in der eingehenden SAML-Antwort vorhanden ist.
* `OVERLEAF_SAML_WANT_ASSERTIONS_SIGNED` und `OVERLEAF_SAML_WANT_AUTHN_RESPONSE_SIGNED`
  * Wenn auf `true` (Standard) erwartet Overleaf, dass die SAML-Assertions bzw. die gesamte SAML-Authentifizierungsantwort vom IdP signiert sind. Wenn beide Optionen `false`, muss mindestens eine der Assertions oder die Antwort signiert sein.
* `OVERLEAF_SAML_REQUEST_ID_EXPIRATION_PERIOD_MS`
  * Definiert die Ablaufzeit, nach der eine für eine SAML-Anfrage generierte Request-ID ungültig ist, wenn sie in einer SAML-Antwort im `InResponseTo` Feld InResponseTo gesehen wird. Standard: 28800000 (8 Stunden).
* `OVERLEAF_SAML_LOGOUT_URL`
  * Basisadresse für Logout-Anfragen (Standard: `entryPoint`).
    * Beispiel: `https://idp.example.com/simplesaml/saml2/idp/SingleLogoutService.php`
* `OVERLEAF_SAML_ADDITIONAL_LOGOUT_PARAMS`
  * JSON-Wörterbuch zusätzlicher Query-Parameter, die 'logout'-Anfragen hinzugefügt werden.
* `OVERLEAF_SAML_IS_ADMIN_FIELD` und `OVERLEAF_SAML_IS_ADMIN_FIELD_VALUE`
  * Wenn beide Umgebungsvariablen gesetzt sind, aktualisiert der Anmeldeprozess `user.isAdmin = true` wenn das vom SAML-IdP zurückgegebene Profil das durch `OVERLEAF_SAML_IS_ADMIN_FIELD` angegebene Attribut enthält und sein Wert entweder übereinstimmt mit `OVERLEAF_SAML_IS_ADMIN_FIELD_VALUE` oder ein Array ist, das `OVERLEAF_SAML_IS_ADMIN_FIELD_VALUE`, andernfalls `user.isAdmin` auf `false`. Wenn eine dieser Variablen nicht gesetzt ist, wird der Admin-Status nur auf `true` während der Erstellung des Admin-Benutzers in Launchpad gesetzt.

**Metadaten für den Identity Provider**

Die aktuelle Version von Overleaf CE enthält einen Endpunkt zum Abrufen der Metadaten des Dienstanbieters: `http://my-overleaf-instance.com/saml/meta`

Der Identity Provider muss so konfiguriert werden, dass er den Overleaf-Server als „Service Provider“ erkennt. Anweisungen dazu finden Sie in der Dokumentation Ihres SAML-Servers.

Unten ist ein Beispiel für geeignete Metadaten des Dienstanbieters:

<details>

<summary><strong>ol-meta.xml</strong></summary>

```
<?xml version="1.0"?>
<EntityDescriptor xmlns="urn:oasis:names:tc:SAML:2.0:metadata"
                  xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
                  entityID="MyOverleaf"
                  ID="_b508c83b7dda452f5b269383fb391107116f8f57">
  <SPSSODescriptor protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol" AuthnRequestsSigned="true" WantAssertionsSigned="true">
    <KeyDescriptor use="signing">
      <ds:KeyInfo>
        <ds:X509Data>
          <ds:X509Certificate>MII...
[skipped]
</ds:X509Certificate>
        </ds:X509Data>
      </ds:KeyInfo>
    </KeyDescriptor>
    <KeyDescriptor use="encryption">
      <ds:KeyInfo>
        <ds:X509Data>
          <ds:X509Certificate>MII...
[skipped]
</ds:X509Certificate>
        </ds:X509Data>
      </ds:KeyInfo>
      <EncryptionMethod Algorithm="http://www.w3.org/2009/xmlenc11#aes256-gcm"/>
      <EncryptionMethod Algorithm="http://www.w3.org/2009/xmlenc11#aes128-gcm"/>
      <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#aes256-cbc"/>
      <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#aes128-cbc"/>
    </KeyDescriptor>
    <SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"
                         Location="https://my-overleaf-instance.com/saml/logout/callback"/>
    <NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress</NameIDFormat>
    <AssertionConsumerService index="1"
                              isDefault="true"
                              Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"
                              Location="https://my-overleaf-instance.com/saml/login/callback"/>
  </SPSSODescriptor>
</EntityDescriptor>

```

</details>

Beachten Sie die Zertifikate, `AssertionConsumerService.Location`, `SingleLogoutService.Location` und `EntityDescriptor.entityID` und setzen Sie sie entsprechend in Ihrer IdP-Konfiguration oder senden Sie die Metadatendatei an den IdP-Administrator.

<details>

<summary><strong>Beispieldatei variables.env (minimal)</strong></summary>

<pre><code>OVERLEAF_APP_NAME="Our Overleaf Instance"

ENABLED_LINKED_FILE_TYPES=project_file,project_output_file,url

# Aktiviert die Erstellung von Thumbnails mit ImageMagick
ENABLE_CONVERSIONS=true

# Deaktiviert die Anforderung zur 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=This system is run by department x

OVERLEAF_PROXY_LEARN=true
NAV_HIDE_POWERED_BY=true

#################
##     SAML    ##
#################

EXTERNAL_AUTH=saml
OVERLEAF_SAML_ISSUER=MyOverleaf
OVERLEAF_SAML_IDENTITY_SERVICE_NAME='Mit SAML-Anbieter anmelden'
OVERLEAF_SAML_EMAIL_FIELD=Email
OVERLEAF_SAML_FIRST_NAME_FIELD=DisplayName
OVERLEAF_SAML_LAST_NAME_FIELD=DisplayName
OVERLEAF_SAML_ENTRYPOINT=http://localhost:18000/login/saml/authorize/admin/SAML_Overleaf
<strong>OVERLEAF_SAML_IDP_CERT=/var/lib/overleaf/certs/idp_cert.pem
</strong>OVERLEAF_SAML_SIGNATURE_ALGORITHM=
</code></pre>

</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/de/konfiguration/overleaf-toolkit/authentication/saml-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.
