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

# Uwierzytelnianie SAML

<Info>
  Ta funkcja została opracowana przez [yu-i-i/overleaf-cep](https://github.com/yu-i-i/overleaf-cep). Poniżej udostępniamy dokumentację, która pomoże Ci ją skonfigurować.
</Info>

### Konfiguracja

Wewnętrznie moduł SAML Overleaf korzysta z biblioteki [passport-saml](https://github.com/node-saml/passport-saml); większość poniższych opcji konfiguracyjnych jest przekazywana do `passport-saml`. Jeśli masz problemy z konfiguracją SAML, warto przeczytać README biblioteki `passport-saml`, aby zorientować się, jakiej konfiguracji oczekuje.

Do włączenia modułu uwierzytelniania SAML wymagana jest zmienna środowiskowa `EXTERNAL_AUTH`. Określa ona, które zewnętrzne metody uwierzytelniania są aktywne. Wartością tej zmiennej jest lista. Jeśli lista zawiera `saml`, uwierzytelnianie SAML zostanie włączone.

Na przykład: `EXTERNAL_AUTH=ldap saml`

Przy metodzie uwierzytelniania SAML użytkownik jest przekierowywany na stronę uwierzytelniania dostawcy tożsamości (IdP). Jeśli IdP pomyślnie uwierzytelni użytkownika, w bazie użytkowników Overleaf wyszukiwany jest rekord zawierający pole `samlIdentifiers` o następującej strukturze:

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

Wartość `externalUserId` musi odpowiadać wartości właściwości określonej przez `userIdAttribute` w profilu użytkownika zwróconym przez serwer IdP.

Jeśli nie zostanie znaleziony pasujący rekord, w bazie danych wyszukiwany jest użytkownik, którego główny adres e-mail odpowiada adresowi e-mail w profilu użytkownika IdP:

* Jeśli taki użytkownik zostanie znaleziony, pole `hashedPassword` jest usuwane, aby wyłączyć uwierzytelnianie lokalne, i dodawane jest pole `samlIdentifiers`.
* Jeśli nie zostanie znaleziony pasujący użytkownik, tworzony jest nowy użytkownik z adresem e-mail i `samlIdentifiers` z profilu IdP.

<strong>Uwaga:</strong> obecnie obsługiwany jest tylko jeden IdP SAML. Pole `providerId` w `samlIdentifiers` ma stałą wartość `'1'`.

#### Zmienne środowiskowe

* `OVERLEAF_SAML_IDENTITY_SERVICE_NAME`
  * Wyświetlana nazwa usługi tożsamości, używana na stronie logowania (domyślnie: `Log in with SAML IdP`).
* `OVERLEAF_SAML_USER_ID_FIELD`
  * Wartość tego atrybutu będzie używana przez Overleaf jako zewnętrzny identyfikator użytkownika; domyślnie `nameID`.
* `OVERLEAF_SAML_EMAIL_FIELD`
  * Nazwa pola adresu e-mail w profilu użytkownika; domyślnie `nameID`.
* `OVERLEAF_SAML_FIRST_NAME_FIELD`
  * Nazwa pola firstName w profilu użytkownika; domyślnie `givenName`.
* `OVERLEAF_SAML_LAST_NAME_FIELD`
  * Nazwa pola lastName w profilu użytkownika; domyślnie `lastName`
* `OVERLEAF_SAML_UPDATE_USER_DETAILS_ON_LOGIN`
  * Jeśli ustawiono na `true`, przy logowaniu aktualizowane są pola `first_name` i `last_name` użytkownika, a formularz danych użytkownika na stronie `/user/settings` zostaje wyłączony.
* `OVERLEAF_SAML_ENTRYPOINT` <strong>(wymagana)</strong>
  * Adres URL punktu wejścia usługi tożsamości SAML.
    * Przykład: `https://idp.example.com/simplesaml/saml2/idp/SSOService.php`
    * Przykład dla Azure: `https://login.microsoftonline.com/8b26b46a-6dd3-45c7-a104-f883f4db1f6b/saml2`
* `OVERLEAF_SAML_ISSUER` <strong>(wymagana)</strong>
  * Nazwa wystawcy (Issuer).
* `OVERLEAF_SAML_AUDIENCE`
  * Oczekiwana wartość Audience w odpowiedzi SAML; domyślnie wartość `OVERLEAF_SAML_ISSUER`.
* `OVERLEAF_SAML_IDP_CERT` <strong>(wymagana)</strong>
  * Ścieżka do pliku zawierającego publiczny certyfikat dostawcy tożsamości, używany do weryfikacji podpisów przychodzących odpowiedzi SAML. Jeśli dostawca tożsamości ma kilka ważnych certyfikatów podpisujących, może to być tablica JSON ze ścieżkami do certyfikatów.
    * Przykład (jeden certyfikat): `/var/lib/overleaf/certs/idp_cert.pem`
    * Przykład (wiele certyfikatów): `["var/lib/overleaf/certs/idp_cert.pem", "/var/lib/overleaf/certs/idp_cert_old.pem"]`
* `OVERLEAF_SAML_PUBLIC_CERT`
  * Ścieżka do pliku zawierającego publiczny certyfikat podpisujący, osadzany w żądaniach uwierzytelniania, aby IdP mógł weryfikować podpisy przychodzących żądań SAML. Jest wymagany przy konfigurowaniu [punktu końcowego metadanych](https://github.com/yu-i-i/overleaf-cep/wiki/Extended-CE:-SAML-Authentication#metadata-for-the-identity-provider), gdy strategia jest skonfigurowana z `OVERLEAF_SAML_PRIVATE_KEY`. Aby obsłużyć rotację certyfikatów, można podać tablicę JSON ze ścieżkami do certyfikatów. W takim przypadku pierwszy element tablicy powinien odpowiadać bieżącemu `OVERLEAF_SAML_PRIVATE_KEY`. Dodatkowe elementy tablicy mogą służyć do publikowania przyszłych certyfikatów dla IdP przed zmianą `OVERLEAF_SAML_PRIVATE_KEY`.
* `OVERLEAF_SAML_PRIVATE_KEY`
  * Ścieżka do pliku zawierającego klucz prywatny w formacie PEM, odpowiadający `OVERLEAF_SAML_PUBLIC_CERT`, używany do podpisywania żądań uwierzytelniania wysyłanych przez passport-saml.
* `OVERLEAF_SAML_DECRYPTION_CERT`
  * Ścieżka do pliku zawierającego certyfikat publiczny, używany przez [punkt końcowy metadanych](https://github.com/yu-i-i/overleaf-cep/wiki/Extended-CE:-SAML-Authentication#metadata-for-the-identity-provider).
* `OVERLEAF_SAML_DECRYPTION_PVK`
  * Ścieżka do pliku zawierającego klucz prywatny odpowiadający `OVERLEAF_SAML_DECRYPTION_CERT`, który będzie używany do próby odszyfrowania wszystkich otrzymanych zaszyfrowanych asercji.
* `OVERLEAF_SAML_SIGNATURE_ALGORITHM`
  * Opcjonalnie ustawia algorytm podpisu dla podpisywania żądań; prawidłowe wartości to 'sha1' (domyślna), 'sha256' (zalecana), 'sha512' (najbezpieczniejsza, sprawdź, czy Twój IdP ją obsługuje).
* `OVERLEAF_SAML_ADDITIONAL_PARAMS`
  * Słownik JSON z dodatkowymi parametrami zapytania dodawanymi do wszystkich żądań.
* `OVERLEAF_SAML_ADDITIONAL_AUTHORIZE_PARAMS`
  * Słownik JSON z dodatkowymi parametrami zapytania dodawanymi do żądań 'authorize'.
    * Przykład: `{"some_key": "some_value"}`
* `OVERLEAF_SAML_IDENTIFIER_FORMAT`
  * Format identyfikatora nazwy, o który należy poprosić dostawcę tożsamości (domyślnie: `urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress`). W przypadku użycia `urn:oasis:names:tc:SAML:2.0:nameid-format:persistent` upewnij się, że zdefiniowano zmienną środowiskową `OVERLEAF_SAML_EMAIL_FIELD`. Jeśli wymagany jest `urn:oasis:names:tc:SAML:2.0:nameid-format:transient`, musisz także zdefiniować zmienną środowiskową `OVERLEAF_SAML_USER_ID_FIELD`, którą można na przykład ustawić na adres e-mail użytkownika.
* `OVERLEAF_SAML_ACCEPTED_CLOCK_SKEW_MS`
  * Akceptowalna różnica czasu (w milisekundach) między klientem a serwerem podczas sprawdzania znaczników czasu warunków ważności asercji OnBefore i NotOnOrAfter. Ustawienie -1 całkowicie wyłącza sprawdzanie tych warunków. Domyślnie 0.
* `OVERLEAF_SAML_ATTRIBUTE_CONSUMING_SERVICE_INDEX`
  * Atrybut `AttributeConsumingServiceIndex` dodawany do AuthnRequest, aby wskazać IdP, który zestaw atrybutów dołączyć do odpowiedzi ([link](http://blog.aniljohn.com/2014/01/data-minimization-front-channel-saml-attribute-requests.html)).
* `OVERLEAF_SAML_AUTHN_CONTEXT`
  * Tablica JSON wartości formatu identyfikatora nazwy dla żądanego kontekstu uwierzytelniania. Domyślnie: `["urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport"]`.
* `OVERLEAF_SAML_FORCE_AUTHN`
  * Jeśli `true`, początkowe żądanie SAML od dostawcy usług określa, że IdP powinien wymusić ponowne uwierzytelnienie użytkownika, nawet jeśli ma on ważną sesję.
* `OVERLEAF_SAML_DISABLE_REQUESTED_AUTHN_CONTEXT`
  * Jeśli `true`, nie jest żądany określony kontekst uwierzytelniania. Możesz na przykład ustawić tę wartość na `true`, aby zezwolić na dodatkowe konteksty, takie jak logowanie bez hasła (`urn:oasis:names:tc:SAML:2.0:ac:classes:X509`). Obsługa dodatkowych kontekstów zależy od Twojego IdP.
* `OVERLEAF_SAML_AUTHN_REQUEST_BINDING`
  * Jeśli ustawiono na `HTTP-POST`, uwierzytelnianie jest żądane od IdP za pomocą powiązania HTTP POST; w przeciwnym razie domyślnie używane jest HTTP-Redirect.
* `OVERLEAF_SAML_VALIDATE_IN_RESPONSE_TO`
  * Jeśli `always`, InResponseTo będzie weryfikowane w przychodzących odpowiedziach SAML.
  * Jeśli `never`, InResponseTo nie będzie weryfikowane (domyślnie).
  * Jeśli `ifPresent`, InResponseTo będzie weryfikowane tylko wtedy, gdy występuje w przychodzącej odpowiedzi SAML.
* `OVERLEAF_SAML_WANT_ASSERTIONS_SIGNED` i `OVERLEAF_SAML_WANT_AUTHN_RESPONSE_SIGNED`
  * Gdy ustawiono na `true` (domyślnie), Overleaf oczekuje, że odpowiednio asercje SAML lub cała odpowiedź uwierzytelniania SAML będą podpisane przez IdP. Gdy obie opcje mają wartość `false`, podpisana musi być co najmniej jedna z asercji lub odpowiedź.
* `OVERLEAF_SAML_REQUEST_ID_EXPIRATION_PERIOD_MS`
  * Określa czas wygaśnięcia, po którym identyfikator żądania wygenerowany dla żądania SAML nie będzie ważny, jeśli pojawi się w polu `InResponseTo` odpowiedzi SAML. Domyślnie: 28800000 (8 godzin).
* `OVERLEAF_SAML_LOGOUT_URL`
  * Adres bazowy, pod który wysyłane są żądania wylogowania (domyślnie: `entryPoint`).
    * Przykład: `https://idp.example.com/simplesaml/saml2/idp/SingleLogoutService.php`
* `OVERLEAF_SAML_ADDITIONAL_LOGOUT_PARAMS`
  * Słownik JSON z dodatkowymi parametrami zapytania dodawanymi do żądań 'logout'.
* `OVERLEAF_SAML_IS_ADMIN_FIELD` i `OVERLEAF_SAML_IS_ADMIN_FIELD_VALUE`
  * Gdy obie zmienne środowiskowe są ustawione, proces logowania ustawia `user.isAdmin = true`, jeśli profil zwrócony przez IdP SAML zawiera atrybut określony przez `OVERLEAF_SAML_IS_ADMIN_FIELD`, a jego wartość odpowiada `OVERLEAF_SAML_IS_ADMIN_FIELD_VALUE` lub jest tablicą zawierającą `OVERLEAF_SAML_IS_ADMIN_FIELD_VALUE`; w przeciwnym razie `user.isAdmin` jest ustawiane na `false`. Jeśli którakolwiek z tych zmiennych nie jest ustawiona, status administratora jest ustawiany na `true` tylko podczas tworzenia użytkownika-administratora w Launchpad.

**Metadane dla dostawcy tożsamości**

Bieżąca wersja Overleaf CE zawiera punkt końcowy do pobierania metadanych dostawcy usług (Service Provider): `http://my-overleaf-instance.com/saml/meta`

Dostawcę tożsamości należy skonfigurować tak, aby rozpoznawał serwer Overleaf jako „dostawcę usług” (Service Provider). Instrukcje, jak to zrobić, znajdziesz w dokumentacji swojego serwera SAML.

Poniżej znajduje się przykład odpowiednich metadanych dostawcy usług:

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

Zwróć uwagę na certyfikaty, `AssertionConsumerService.Location`, `SingleLogoutService.Location` oraz `EntityDescriptor.entityID` i ustaw je odpowiednio w konfiguracji IdP albo wyślij plik metadanych administratorowi IdP.

<Accordion title="Przykładowy plik variables.env (minimalny)">
  ```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>

## Krok po kroku: goauthentik

Poniżej opisano konfigurację przetestowaną z [goauthentik](https://goauthentik.io/). Zastąp `https://overleaf.example.com` swoim `OVERLEAF_SITE_URL`, a `https://authentik.example.com` adresem swojej instancji Authentik.

<Steps>
  <Step title="Utwórz dostawcę i aplikację">
    W Authentik otwórz **Applications > Applications** i kliknij **New Application**. Kreator tworzy aplikację wraz z jej dostawcą.

    1\. Nadaj aplikacji nazwę i slug, na przykład `overleaf`, i kliknij **Next**:

    <Frame caption="Authentik: nazwa i slug aplikacji">
      <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\. Wybierz **SAML Provider** i kliknij **Next**:

    <Frame caption="Authentik: wybór dostawcy SAML">
      <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\. Wypełnij dane dostawcy:

    * **Authorization Flow**: `default-provider-authorization-implicit-consent`
    * **ACS URL**: `https://overleaf.example.com/saml/login/callback`
    * **Audience**: nazwa dla Overleaf, na przykład `overleaf`. Overleaf wysyła ją jako `OVERLEAF_SAML_ISSUER`.

    <Frame caption="Authentik: dostawca SAML aplikacji">
      <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\. Otwórz **Advanced protocol settings** i ustaw:

    * **Signing Certificate**: certyfikat, na przykład `authentik Self-signed Certificate`
    * **Sign assertions** i **Sign responses**: oba włączone
    * **Service Provider Binding**: `Post`

    <Frame caption="Authentik: podpisywanie i powiązanie przetestowanego dostawcy (instancja testowa)">
      <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\. Klikaj **Next** aż do ostatniej strony i zatwierdź aplikację.
  </Step>

  <Step title="Skopiuj wartości ze strony dostawcy">
    Ponownie otwórz dostawcę. Wszystko, czego potrzebuje Overleaf, znajduje się w jego przeglądzie:

    <Frame caption="Authentik: przegląd dostawcy SAML (instancja testowa)">
      <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>

    | Na stronie dostawcy | Zmienna środowiskowa |
    | - | - |
    | **SAML Endpoint** | `OVERLEAF_SAML_ENTRYPOINT` i `OVERLEAF_SAML_LOGOUT_URL` |
    | **Audience** | `OVERLEAF_SAML_ISSUER` |
    | **Download signing certificate** (plik) | `OVERLEAF_SAML_IDP_CERT`, patrz następny krok |

    <Warning>
      **EntityID/Issuer** w sekcji **SAML Configuration** to nazwa samego Authentik. Nie wpisuj jej do `OVERLEAF_SAML_ISSUER`; użyj wartości **Audience**.
    </Warning>
  </Step>

  <Step title="Zainstaluj certyfikat podpisujący">
    Kliknij **Download** pod **Download signing certificate** i zapisz plik jako `data/overleaf/certs/idp_cert.pem` w katalogu Toolkit. Kontener widzi go jako `/var/lib/overleaf/certs/idp_cert.pem`:

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

  <Step title="Zmapuj atrybuty">
    Authentik wysyła swoje atrybuty pod następującymi nazwami:

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

    Grupy są przesyłane jako `http://schemas.xmlsoap.org/claims/Group`, czyli lista. Aby członkowie grupy Authentik `Admins` stali się administratorami Overleaf:

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

    <Warning>
      Flaga administratora jest aktualizowana przy każdym logowaniu SAML. Przy błędnym polu lub wartości każdy administrator logujący się przez SAML traci uprawnienia administratora. Najpierw przetestuj mapowanie na drugim koncie administratora.
    </Warning>
  </Step>
</Steps>

<Accordion title="Przetestowany plik variables.env dla 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.