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

# SAML-Authentifizierung

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

### Konfiguration

Intern verwendet das Overleaf-SAML-Modul die Bibliothek [passport-saml](https://github.com/node-saml/passport-saml); die meisten der folgenden Konfigurationsoptionen werden an `passport-saml` durchgereicht. Wenn Sie Probleme bei der Konfiguration von SAML haben, lohnt es sich, die README von `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 Variablen ist eine Liste. Enthält die Liste `saml`, wird die SAML-Authentifizierung aktiviert.

Beispiel: `EXTERNAL_AUTH=ldap saml`

Bei Verwendung der SAML-Authentifizierungsmethode wird ein Benutzer auf die Authentifizierungsseite des Identity Providers (IdP) weitergeleitet. Wenn der IdP den Benutzer erfolgreich authentifiziert, wird die Overleaf-Benutzerdatenbank nach einem Datensatz durchsucht, der ein Feld `samlIdentifiers` mit folgender Struktur enthält:

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

Die `externalUserId` muss mit dem Wert der durch `userIdAttribute` angegebenen Eigenschaft im vom IdP-Server zurückgegebenen Benutzerprofil übereinstimmen.

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

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

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

#### Umgebungsvariablen

* `OVERLEAF_SAML_IDENTITY_SERVICE_NAME`
  * Anzeigename des Identitätsdienstes, der auf der Anmeldeseite verwendet wird (Standard: `Log in with SAML IdP`).
* `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-Feldes im Benutzerprofil, Standard ist `nameID`.
* `OVERLEAF_SAML_FIRST_NAME_FIELD`
  * Name des firstName-Feldes im Benutzerprofil, Standard ist `givenName`.
* `OVERLEAF_SAML_LAST_NAME_FIELD`
  * Name des lastName-Feldes im Benutzerprofil, Standard ist `lastName`
* `OVERLEAF_SAML_UPDATE_USER_DETAILS_ON_LOGIN`
  * Wenn auf `true` gesetzt, werden die Felder `first_name` und `last_name` des Benutzers bei der Anmeldung aktualisiert, und das Formular für Benutzerdetails auf der Seite `/user/settings` wird deaktiviert.
* `OVERLEAF_SAML_ENTRYPOINT` <strong>(erforderlich)</strong>
  * Einstiegs-URL (Entrypoint) des SAML-Identitätsdienstes.
    * 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` <strong>(erforderlich)</strong>
  * Der Name des Issuers.
* `OVERLEAF_SAML_AUDIENCE`
  * Erwartete Audience der SAML-Antwort, Standard ist der Wert von `OVERLEAF_SAML_ISSUER`.
* `OVERLEAF_SAML_IDP_CERT` <strong>(erforderlich)</strong>
  * Pfad zu einer Datei mit dem öffentlichen Zertifikat des Identity Providers, das zur Überprüfung der Signaturen eingehender SAML-Antworten verwendet wird. Verfügt der Identity Provider über mehrere gültige Signaturzertifikate, kann hier ein JSON-Array mit Pfaden zu den Zertifikaten angegeben werden.
    * 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 überprüfen kann. Es ist erforderlich, wenn der [Metadaten-Endpunkt](https://github.com/yu-i-i/overleaf-cep/wiki/Extended-CE:-SAML-Authentication#metadata-for-the-identity-provider) eingerichtet wird und die Strategie mit einem `OVERLEAF_SAML_PRIVATE_KEY` konfiguriert ist. Zur Unterstützung der Zertifikatsrotation kann ein JSON-Array mit Pfaden zu Zertifikaten angegeben werden. Bei Angabe eines Arrays von Zertifikaten sollte der erste Eintrag dem aktuellen `OVERLEAF_SAML_PRIVATE_KEY` entsprechen. Weitere Einträge im Array können verwendet werden, um kommende Zertifikate an IdPs zu veröffentlichen, bevor der `OVERLEAF_SAML_PRIVATE_KEY` geändert wird.
* `OVERLEAF_SAML_PRIVATE_KEY`
  * Pfad zu einer Datei mit einem PEM-formatierten privaten Schlüssel passend zu `OVERLEAF_SAML_PUBLIC_CERT`, der zum Signieren der von passport-saml gesendeten Authentifizierungsanfragen verwendet wird.
* `OVERLEAF_SAML_DECRYPTION_CERT`
  * Pfad zu einer Datei mit einem ö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) verwendet wird.
* `OVERLEAF_SAML_DECRYPTION_PVK`
  * Pfad zu einer Datei mit einem privaten Schlüssel passend zu `OVERLEAF_SAML_DECRYPTION_CERT`, der verwendet wird, um empfangene verschlüsselte Assertions zu entschlüsseln.
* `OVERLEAF_SAML_SIGNATURE_ALGORITHM`
  * Legt optional den Signaturalgorithmus für das Signieren von Anfragen fest; 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-Dictionary mit zusätzlichen Query-Parametern, die allen Anfragen hinzugefügt werden.
* `OVERLEAF_SAML_ADDITIONAL_AUTHORIZE_PARAMS`
  * JSON-Dictionary mit zusätzlichen Query-Parametern, die 'authorize'-Anfragen hinzugefügt werden.
    * Beispiel: `{"some_key": "some_value"}`
* `OVERLEAF_SAML_IDENTIFIER_FORMAT`
  * Name-Identifier-Format, das beim Identity Provider angefordert wird (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 Umgebungsvariable `OVERLEAF_SAML_EMAIL_FIELD` definiert ist. Wird `urn:oasis:names:tc:SAML:2.0:nameid-format:transient` benötigt, müssen Sie zusätzlich die Umgebungsvariable `OVERLEAF_SAML_USER_ID_FIELD` definieren, die beispielsweise auf die E-Mail-Adresse des Benutzers gesetzt werden kann.
* `OVERLEAF_SAML_ACCEPTED_CLOCK_SKEW_MS`
  * Zulässige Zeitabweichung in Millisekunden zwischen Client und Server bei der Prüfung der Gültigkeitszeitstempel der Assertion-Bedingungen OnBefore und NotOnOrAfter. Mit -1 wird die Prüfung dieser Bedingungen vollständig deaktiviert. Standard ist 0.
* `OVERLEAF_SAML_ATTRIBUTE_CONSUMING_SERVICE_INDEX`
  * Attribut `AttributeConsumingServiceIndex`, das dem AuthnRequest hinzugefügt wird, um dem IdP mitzuteilen, welcher Attributsatz an die Antwort angehängt werden soll ([Link](http://blog.aniljohn.com/2014/01/data-minimization-front-channel-saml-attribute-requests.html)).
* `OVERLEAF_SAML_AUTHN_CONTEXT`
  * JSON-Array mit Name-Identifier-Format-Werten zur Anforderung des Authentifizierungskontexts. Standard: `["urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport"]`.
* `OVERLEAF_SAML_FORCE_AUTHN`
  * Wenn `true`, legt die initiale SAML-Anfrage des Service Providers fest, dass der IdP eine erneute Authentifizierung des Benutzers erzwingen soll, selbst wenn dieser eine gültige Sitzung besitzt.
* `OVERLEAF_SAML_DISABLE_REQUESTED_AUTHN_CONTEXT`
  * Wenn `true`, wird kein bestimmter Authentifizierungskontext angefordert. Sie können dies beispielsweise auf `true` setzen, um zusätzliche Kontexte wie passwortlose Anmeldungen (`urn:oasis:names:tc:SAML:2.0:ac:classes:X509`) zu erlauben. Die Unterstützung zusätzlicher Kontexte hängt von Ihrem IdP ab.
* `OVERLEAF_SAML_AUTHN_REQUEST_BINDING`
  * Wenn auf `HTTP-POST` gesetzt, wird die Authentifizierung beim IdP über HTTP-POST-Binding angefordert, andernfalls standardmäßig über HTTP-Redirect.
* `OVERLEAF_SAML_VALIDATE_IN_RESPONSE_TO`
  * Bei `always` wird InResponseTo in eingehenden SAML-Antworten validiert.
  * Bei `never` wird InResponseTo nicht validiert (Standard).
  * Bei `ifPresent` 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` gesetzt (Standard), erwartet Overleaf, dass die SAML-Assertions bzw. die gesamte SAML-Authentifizierungsantwort vom IdP signiert sind. Sind beide Optionen `false`, muss mindestens eine der Assertions oder die Antwort signiert sein.
* `OVERLEAF_SAML_REQUEST_ID_EXPIRATION_PERIOD_MS`
  * Legt die Ablaufzeit fest, nach der eine für eine SAML-Anfrage erzeugte Request-ID nicht mehr gültig ist, wenn sie in einer SAML-Antwort im Feld `InResponseTo` auftaucht. Standard: 28800000 (8 Stunden).
* `OVERLEAF_SAML_LOGOUT_URL`
  * Basisadresse, die bei Logout-Anfragen aufgerufen wird (Standard: `entryPoint`).
    * Beispiel: `https://idp.example.com/simplesaml/saml2/idp/SingleLogoutService.php`
* `OVERLEAF_SAML_ADDITIONAL_LOGOUT_PARAMS`
  * JSON-Dictionary mit zusätzlichen Query-Parametern, die 'logout'-Anfragen hinzugefügt werden.
* `OVERLEAF_SAML_IS_ADMIN_FIELD` und `OVERLEAF_SAML_IS_ADMIN_FIELD_VALUE`
  * Wenn beide Umgebungsvariablen gesetzt sind, setzt der Anmeldevorgang `user.isAdmin = true`, sofern das vom SAML-IdP zurückgegebene Profil das durch `OVERLEAF_SAML_IS_ADMIN_FIELD` angegebene Attribut enthält und dessen Wert entweder mit `OVERLEAF_SAML_IS_ADMIN_FIELD_VALUE` übereinstimmt oder ein Array ist, das `OVERLEAF_SAML_IS_ADMIN_FIELD_VALUE` enthält; andernfalls wird `user.isAdmin` auf `false` gesetzt. Ist eine dieser Variablen nicht gesetzt, wird der Admin-Status nur bei der Erstellung des Admin-Benutzers im Launchpad auf `true` 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. Anweisungen dazu finden Sie in der Dokumentation Ihres SAML-Servers.

Nachfolgend ein Beispiel für geeignete Service-Provider-Metadaten:

<Accordion title="ol-meta.xml">
  ```text theme={null}
  <?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>

  ```
</Accordion>

Notieren Sie sich die Zertifikate, `AssertionConsumerService.Location`, `SingleLogoutService.Location` und `EntityDescriptor.entityID` und tragen Sie diese entsprechend in Ihre IdP-Konfiguration ein, oder senden Sie die Metadatendatei an den IdP-Administrator.

<Accordion title="Beispieldatei variables.env (minimal)">
  ```text theme={null}
  OVERLEAF_APP_NAME="Our Overleaf Instance"

  ENABLED_LINKED_FILE_TYPES=project_file,project_output_file,url

  # Enables Thumbnail generation using ImageMagick
  ENABLE_CONVERSIONS=true

  # Disables email confirmation requirement
  EMAIL_CONFIRMATION_DISABLED=true

  ## Nginx
  # NGINX_WORKER_PROCESSES=4
  # NGINX_WORKER_CONNECTIONS=768

  ## Set for TLS via nginx-proxy
  # OVERLEAF_BEHIND_PROXY=true
  # OVERLEAF_SECURE_COOKIE=true

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

  OVERLEAF_LEFT_FOOTER=[{"text": "Contact your support team", "url": "mailto:support@example.com"}]
  OVERLEAF_RIGHT_FOOTER=[{"text":"Hello, I am on the Right", "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='Log in with SAML Provider'
  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
  OVERLEAF_SAML_IDP_CERT=/var/lib/overleaf/certs/idp_cert.pem
  OVERLEAF_SAML_SIGNATURE_ALGORITHM=
  ```
</Accordion>

## Schritt für Schritt: goauthentik

Diese Anleitung beschreibt eine Einrichtung, die mit [goauthentik](https://goauthentik.io/) getestet wurde. Ersetzen Sie `https://overleaf.example.com` durch Ihre `OVERLEAF_SITE_URL` und `https://authentik.example.com` durch die Adresse Ihrer Authentik-Instanz.

<Steps>
  <Step title="Provider und Anwendung anlegen">
    Öffnen Sie in Authentik **Applications > Applications** und klicken Sie auf **New Application**. Der Assistent legt die Anwendung und ihren Provider gemeinsam an.

    1\. Geben Sie der Anwendung einen Namen und einen Slug, zum Beispiel `overleaf`, und klicken Sie auf **Next**:

    <Frame caption="Authentik: Name und Slug der Anwendung">
      <img src="https://mintcdn.com/ayakaleaf-pro/TjqwH4XzxYAkHStq/images/on-premises/saml-authentik-app.png?fit=max&auto=format&n=TjqwH4XzxYAkHStq&q=85&s=e2405f63578ab00991ad5046665eab32" alt="" width="1120" height="810" data-path="images/on-premises/saml-authentik-app.png" />
    </Frame>

    2\. Wählen Sie **SAML Provider** und klicken Sie auf **Next**:

    <Frame caption="Authentik: SAML-Provider auswählen">
      <img src="https://mintcdn.com/ayakaleaf-pro/TjqwH4XzxYAkHStq/images/on-premises/saml-authentik-type.png?fit=max&auto=format&n=TjqwH4XzxYAkHStq&q=85&s=537780362698d5088132048754ac6481" alt="" width="1120" height="810" data-path="images/on-premises/saml-authentik-type.png" />
    </Frame>

    3\. Füllen Sie die Provider-Einstellungen aus:

    * **Authorization Flow**: `default-provider-authorization-implicit-consent`
    * **ACS URL**: `https://overleaf.example.com/saml/login/callback`
    * **Audience**: ein Name für Overleaf, zum Beispiel `overleaf`. Overleaf sendet ihn als `OVERLEAF_SAML_ISSUER`.

    <Frame caption="Authentik: der SAML-Provider der Anwendung">
      <img src="https://mintcdn.com/ayakaleaf-pro/TjqwH4XzxYAkHStq/images/on-premises/saml-authentik-create.png?fit=max&auto=format&n=TjqwH4XzxYAkHStq&q=85&s=4f15b87b90b355e13831b95c07abe427" alt="" width="1120" height="810" data-path="images/on-premises/saml-authentik-create.png" />
    </Frame>

    4\. Öffnen Sie **Advanced protocol settings** und legen Sie Folgendes fest:

    * **Signing Certificate**: ein Zertifikat, zum Beispiel `authentik Self-signed Certificate`
    * **Sign assertions** und **Sign responses**: beide aktiviert
    * **Service Provider Binding**: `Post`

    <Frame caption="Authentik: Signierung und Binding eines getesteten Providers (Testinstanz)">
      <img src="https://mintcdn.com/ayakaleaf-pro/TjqwH4XzxYAkHStq/images/on-premises/saml-authentik-advanced.png?fit=max&auto=format&n=TjqwH4XzxYAkHStq&q=85&s=39b136a219fb192ed42d337de0058166" alt="" width="1089" height="417" data-path="images/on-premises/saml-authentik-advanced.png" />
    </Frame>

    5\. Klicken Sie auf **Next** bis zur letzten Seite und schließen Sie die Anwendung ab.
  </Step>

  <Step title="Werte von der Provider-Seite kopieren">
    Öffnen Sie den Provider erneut. Alles, was Overleaf benötigt, finden Sie in seiner Übersicht:

    <Frame caption="Authentik: Übersicht eines SAML-Providers (Testinstanz)">
      <img src="https://mintcdn.com/ayakaleaf-pro/TjqwH4XzxYAkHStq/images/on-premises/saml-authentik-provider.png?fit=max&auto=format&n=TjqwH4XzxYAkHStq&q=85&s=b73f3aa817b7a18286db6d810ab3b2e9" alt="" width="990" height="963" data-path="images/on-premises/saml-authentik-provider.png" />
    </Frame>

    | Auf der Provider-Seite | Umgebungsvariable |
    | - | - |
    | **SAML Endpoint** | `OVERLEAF_SAML_ENTRYPOINT` und `OVERLEAF_SAML_LOGOUT_URL` |
    | **Audience** | `OVERLEAF_SAML_ISSUER` |
    | **Download signing certificate** (eine Datei) | `OVERLEAF_SAML_IDP_CERT`, siehe nächster Schritt |

    <Warning>
      **EntityID/Issuer** unter **SAML Configuration** ist der Name von Authentik selbst. Tragen Sie ihn nicht in `OVERLEAF_SAML_ISSUER` ein, sondern verwenden Sie die **Audience**.
    </Warning>
  </Step>

  <Step title="Signaturzertifikat installieren">
    Klicken Sie unter **Download signing certificate** auf **Download** und speichern Sie die Datei als `data/overleaf/certs/idp_cert.pem` in Ihrem Toolkit-Verzeichnis. Der Container sieht sie als `/var/lib/overleaf/certs/idp_cert.pem`:

    ```dotenv theme={null}
    OVERLEAF_SAML_IDP_CERT=/var/lib/overleaf/certs/idp_cert.pem
    ```
  </Step>

  <Step title="Attribute zuordnen">
    Authentik sendet seine Attribute unter diesen Namen:

    ```dotenv theme={null}
    OVERLEAF_SAML_USER_ID_FIELD=http://schemas.goauthentik.io/2021/02/saml/username
    OVERLEAF_SAML_EMAIL_FIELD=http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress
    OVERLEAF_SAML_FIRST_NAME_FIELD=http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name
    OVERLEAF_SAML_LAST_NAME_FIELD=http://schemas.goauthentik.io/2021/02/saml/username
    ```

    Die Gruppen werden als `http://schemas.xmlsoap.org/claims/Group` übermittelt, eine Liste. Um die Mitglieder der Authentik-Gruppe `Admins` zu Administratoren von Overleaf zu machen:

    ```dotenv theme={null}
    OVERLEAF_SAML_IS_ADMIN_FIELD=http://schemas.xmlsoap.org/claims/Group
    OVERLEAF_SAML_IS_ADMIN_FIELD_VALUE=Admins
    ```

    <Warning>
      Das Admin-Flag wird bei jeder SAML-Anmeldung aktualisiert. Bei einem falschen Feld oder Wert verliert jeder Administrator, der sich über SAML anmeldet, seine Administratorrechte. Testen Sie die Zuordnung zuerst mit einem zweiten Administratorkonto.
    </Warning>
  </Step>
</Steps>

<Accordion title="Getestete variables.env für goauthentik">
  ```dotenv title="variables.env" wrap theme={null}
  EXTERNAL_AUTH=saml
  OVERLEAF_SAML_IDENTITY_SERVICE_NAME=Log in with Authentik
  OVERLEAF_SAML_ENTRYPOINT=https://authentik.example.com/application/saml/overleaf/
  OVERLEAF_SAML_LOGOUT_URL=https://authentik.example.com/application/saml/overleaf/
  OVERLEAF_SAML_ISSUER=overleaf
  OVERLEAF_SAML_IDP_CERT=/var/lib/overleaf/certs/idp_cert.pem
  OVERLEAF_SAML_WANT_ASSERTIONS_SIGNED=true
  OVERLEAF_SAML_WANT_AUTHN_RESPONSE_SIGNED=true
  OVERLEAF_SAML_USER_ID_FIELD=http://schemas.goauthentik.io/2021/02/saml/username
  OVERLEAF_SAML_EMAIL_FIELD=http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress
  OVERLEAF_SAML_FIRST_NAME_FIELD=http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name
  OVERLEAF_SAML_LAST_NAME_FIELD=http://schemas.goauthentik.io/2021/02/saml/username
  OVERLEAF_SAML_IS_ADMIN_FIELD=http://schemas.xmlsoap.org/claims/Group
  OVERLEAF_SAML_IS_ADMIN_FIELD_VALUE=Admins
  OVERLEAF_SAML_UPDATE_USER_DETAILS_ON_LOGIN=true
  ```
</Accordion>


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