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

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

Zum Beispiel: `EXTERNAL_AUTH=ldap saml`

Bei Verwendung der SAML-Authentifizierungsmethode wird ein Benutzer zur Anmeldeseite des Identity Providers (IdP) weitergeleitet. Wenn der IdP den Benutzer erfolgreich authentifiziert, wird die Benutzerdatenbank von Overleaf nach einem Eintrag mit einem `samlIdentifiers` Feld in folgender Struktur:

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

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

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 `hashedPassword` 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 festgelegt 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, standardmäßig `nameID`.
* `OVERLEAF_SAML_EMAIL_FIELD`
  * Name des E-Mail-Felds im Benutzerprofil, standardmäßig `nameID`.
* `OVERLEAF_SAML_FIRST_NAME_FIELD`
  * Name des firstName-Felds im Benutzerprofil, standardmäßig `givenName`.
* `OVERLEAF_SAML_LAST_NAME_FIELD`
  * Name des lastName-Felds im Benutzerprofil, standardmäßig `lastName`
* `OVERLEAF_SAML_UPDATE_USER_DETAILS_ON_LOGIN`
  * Wenn gesetzt auf `true`, aktualisiert das Benutzer `Vorname` und `Nachname` Feld bei der Anmeldung, und schalten Sie das Formular mit den Benutzerdetails aus bei `/user/settings` Seite.
* `OVERLEAF_SAML_ENTRYPOINT` **(erforderlich)**
  * Entrypoint-URL für den SAML-Identitätsdienst.
    * 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 Issuers.
* `OVERLEAF_SAML_AUDIENCE`
  * Erwartete Audience der SAML-Antwort, standardmäßig der Wert von `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 mit 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 Authentifizierungsanfragen eingebettet wird, damit der IdP die Signaturen der eingehenden SAML-Anfrage validieren kann. Es ist erforderlich beim Einrichten des [Metadaten-Endpunkts](https://github.com/yu-i-i/overleaf-cep/wiki/Extended-CE:-SAML-Authentication#metadata-for-the-identity-provider) wenn die Strategie mit einem `OVERLEAF_SAML_PRIVATE_KEY`. Zur Unterstützung der Zertifikatsrotation kann ein JSON-Array mit Pfaden zu Zertifikaten angegeben werden. Wenn ein Zertifikatsarray 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 bevorstehende Zertifikate den IdPs bereitzustellen, bevor der `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 Authentifizierungsanfragen verwendet wird, die von passport-saml gesendet werden.
* `OVERLEAF_SAML_DECRYPTION_CERT`
  * Pfad zu einer Datei mit einem öffentlichen Zertifikat, verwendet für das [Metadaten-Endpunkts](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 einem privaten Schlüssel, der dem `OVERLEAF_SAML_DECRYPTION_CERT` entspricht und zum Versuch verwendet wird, alle empfangenen verschlüsselten Assertions zu entschlüsseln.
* `OVERLEAF_SAML_SIGNATURE_ALGORITHM`
  * Optional den Signaturalgorithmus zum Signieren von Anfragen festlegen; gültige Werte sind 'sha1' (Standard), 'sha256' (bevorzugt), 'sha512' (am sichersten, prüfen Sie, ob Ihr IdP ihn 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`). Wenn verwendet wird `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`
  * Zeitabweichung in Millisekunden, die zwischen Client und Server akzeptabel ist, wenn die Gültigkeitszeitstempel der Assertion-Bedingungen OnBefore und NotOnOrAfter geprüft werden. Eine Einstellung von -1 deaktiviert die Prüfung dieser Bedingungen vollständig. Standard ist 0.
* `OVERLEAF_SAML_ATTRIBUTE_CONSUMING_SERVICE_INDEX`
  * `AttributeConsumingServiceIndex` Attribut, das zur AuthnRequest hinzugefügt wird, um dem IdP mitzuteilen, 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 Name-Identifier-Format-Werten, um den Authentifizierungskontext anzufordern. Standard: `["urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport"]`.
* `OVERLEAF_SAML_FORCE_AUTHN`
  * Wenn `true`, gibt die anfängliche SAML-Anfrage des Service Providers an, dass der IdP eine erneute Authentifizierung des Benutzers erzwingen soll, selbst wenn dieser über eine gültige Sitzung verfügt.
* `OVERLEAF_SAML_DISABLE_REQUESTED_AUTHN_CONTEXT`
  * Wenn `true`, keinen bestimmten Authentifizierungskontext anfordern. Zum Beispiel können Sie dies auf `true` setzen, um zusätzliche Kontexte wie passwortlose Anmeldungen zuzulassen (`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 gesetzt 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 `always`, dann wird InResponseTo aus eingehenden SAML-Antworten validiert.
  * Wenn `niemals`, dann wird InResponseTo nicht validiert (Standard).
  * Wenn `ifPresent`, 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 gesetzt auf `true` (Standard) erwartet Overleaf, dass die SAML-Assertions beziehungsweise 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`
  * Legt die Ablaufzeit fest, ab der eine für eine SAML-Anfrage generierte Request-ID ungültig ist, wenn sie in einer SAML-Antwort im `InResponseTo` Feld erscheint. Standard: 28800000 (8 Stunden).
* `OVERLEAF_SAML_LOGOUT_URL`
  * Basisadresse, die mit Logout-Anfragen aufgerufen wird (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 Attribut enthält, das angegeben ist durch `OVERLEAF_SAML_IS_ADMIN_FIELD` angegebene Attribut enthält und dessen Wert entweder `OVERLEAF_SAML_IS_ADMIN_FIELD_VALUE` entspricht oder ein Array ist, das `OVERLEAF_SAML_IS_ADMIN_FIELD_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.

**Metadaten für den Identity Provider**

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

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

Unten ist ein Beispiel für geeignete Service-Provider-Metadaten:

<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 passen Sie sie entsprechend in Ihrer IdP-Konfiguration an, oder senden Sie die Metadatendatei an den IdP-Administrator.

<details>

<summary><strong>Beispiel für die Datei variables.env (Minimum)</strong></summary>

<pre><code>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

#################
##     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://ayakaleaf-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.
