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

# Uwierzytelnianie SAML

Ta funkcja jest rozwijana przez [yu-i-i/overleaf-cep](https://github.com/yu-i-i/overleaf-cep). Oto oferujemy kilka dokumentów do Twojej konfiguracji.

### Konfiguracja

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

Zmienna środowiskowa `EXTERNAL_AUTH` jest wymagane, aby włączyć moduł uwierzytelniania SAML. Ta zmienna środowiskowa określa, które zewnętrzne metody uwierzytelniania są aktywne. Wartość tej zmiennej jest listą. Jeśli lista zawiera `saml` to uwierzytelnianie SAML zostanie aktywowane.

Na przykład: `EXTERNAL_AUTH=ldap saml`

Podczas korzystania z metody uwierzytelniania SAML użytkownik jest przekierowywany do witryny uwierzytelniania dostawcy tożsamości (IdP). Jeśli IdP pomyślnie uwierzytelni użytkownika, baza danych użytkowników Overleaf jest sprawdzana pod kątem rekordu zawierającego `samlIdentifiers` pole o następującej strukturze:

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

Ta `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` pole jest usuwane, aby wyłączyć lokalne uwierzytelnianie, a `samlIdentifiers` pole jest dodawane.
* Jeśli nie zostanie znaleziony pasujący użytkownik, tworzony jest nowy użytkownik z adresem e-mail i `samlIdentifiers` z profilu IdP.

**Uwaga:** Obecnie obsługiwany jest tylko jeden IdP SAML. Pole `providerId` w `samlIdentifiers` jest ustawione na `'1'`.

#### Zmienne środowiskowe

* `OVERLEAF_SAML_IDENTITY_SERVICE_NAME`
  * Nazwa wyświetlana usługi tożsamości, używana na stronie logowania (domyślnie: `Zaloguj się za pomocą 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 Email 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 ustawione na `true`, aktualizuje dane użytkownika `imię` i `nazwisko` pole przy logowaniu i wyłącza formularz danych użytkownika na `/user/settings` stronie.
* `OVERLEAF_SAML_ENTRYPOINT` **(wymagane)**
  * Adres URL punktu wejścia dla usługi tożsamości SAML.
    * Przykład: `https://idp.example.com/simplesaml/saml2/idp/SSOService.php`
    * Przykład Azure: `https://login.microsoftonline.com/8b26b46a-6dd3-45c7-a104-f883f4db1f6b/saml2`
* `OVERLEAF_SAML_ISSUER` **(wymagane)**
  * Nazwa wystawcy.
* `OVERLEAF_SAML_AUDIENCE`
  * Oczekiwana wartość Audience odpowiedzi saml, domyślnie wartość `OVERLEAF_SAML_ISSUER`.
* `OVERLEAF_SAML_IDP_CERT` **(wymagane)**
  * Ś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 wiele poprawnych certyfikatów podpisu, może to być tablica JSON ścieżek 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 podpisu używany do osadzania w żądaniach uwierzytelniania, aby IdP mógł zweryfikować podpisy przychodzącego żądania SAML. Jest to wymagane podczas konfiguracji [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`. Można podać tablicę JSON ścieżek do certyfikatów, aby obsługiwać rotację certyfikatów. Podczas podawania tablicy certyfikatów pierwszy wpis w tablicy powinien odpowiadać bieżącemu `OVERLEAF_SAML_PRIVATE_KEY`. Dodatkowe wpisy w tablicy mogą służyć do publikowania nadchodzących certyfikatów dla IdP przed zmianą `OVERLEAF_SAML_PRIVATE_KEY`.
* `OVERLEAF_SAML_PRIVATE_KEY`
  * Ścieżka do pliku zawierającego prywatny klucz 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 publiczny certyfikat, używany do [punktu końcowego 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 prywatny klucz odpowiadający `OVERLEAF_SAML_DECRYPTION_CERT` który będzie używany do próby odszyfrowania wszelkich otrzymanych zaszyfrowanych asercji.
* `OVERLEAF_SAML_SIGNATURE_ALGORITHM`
  * Opcjonalnie ustaw algorytm podpisu dla podpisywania żądań; prawidłowe wartości to 'sha1' (domyślnie), 'sha256' (preferowany), 'sha512' (najbezpieczniejszy, sprawdź, czy Twój IdP go obsługuje).
* `OVERLEAF_SAML_ADDITIONAL_PARAMS`
  * Słownik JSON dodatkowych parametrów zapytania, które mają zostać dodane do wszystkich żądań.
* `OVERLEAF_SAML_ADDITIONAL_AUTHORIZE_PARAMS`
  * Słownik JSON dodatkowych parametrów zapytania, które mają zostać dodane 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`). Jeśli używasz `urn:oasis:names:tc:SAML:2.0:nameid-format:persistent`, upewnij się, że `OVERLEAF_SAML_EMAIL_FIELD` zmienna środowiskowa jest zdefiniowana. Jeśli `urn:oasis:names:tc:SAML:2.0:nameid-format:transient` jest wymagane, musisz także zdefiniować `OVERLEAF_SAML_ID_FIELD` zmienną środowiskową, którą można na przykład ustawić na adres e-mail użytkownika.
* `OVERLEAF_SAML_ACCEPTED_CLOCK_SKEW_MS`
  * Czas odchylenia w milisekundach, który jest akceptowalny między klientem a serwerem podczas sprawdzania poprawności znaczników czasu warunków asercji OnBefore i NotOnOrAfter. Ustawienie na -1 całkowicie wyłączy sprawdzanie tych warunków. Domyślnie 0.
* `OVERLEAF_SAML_ATTRIBUTE_CONSUMING_SERVICE_INDEX`
  * `AttributeConsumingServiceIndex` atrybut do dodania do AuthnRequest, aby poinformować IdP, jaki zestaw atrybutów ma 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, o które należy poprosić o kontekst 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 posiada ważną sesję.
* `OVERLEAF_SAML_DISABLE_REQUESTED_AUTHN_CONTEXT`
  * Jeśli `true`, nie żądaj konkretnego kontekstu uwierzytelniania. Na przykład można to ustawić 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 ustawione na `HTTP-POST`, będzie żądać uwierzytelnienia od IdP przez wiązanie HTTP POST, w przeciwnym razie domyślnie użyje HTTP-Redirect.
* `OVERLEAF_SAML_VALIDATE_IN_RESPONSE_TO`
  * Jeśli `always`, wtedy InResponseTo będzie weryfikowane w przychodzących odpowiedziach SAML.
  * Jeśli `nigdy`, wtedy InResponseTo nie będzie weryfikowane (domyślnie).
  * Jeśli `ifPresent`, wtedy InResponseTo będzie weryfikowane tylko wtedy, gdy jest obecne w przychodzącej odpowiedzi SAML.
* `OVERLEAF_SAML_WANT_ASSERTIONS_SIGNED` i `OVERLEAF_SAML_WANT_AUTHN_RESPONSE_SIGNED`
  * Po ustawieniu na `true` (domyślnie) Overleaf oczekuje, że asercje SAML, a odpowiednio cała odpowiedź uwierzytelniania SAML, będą podpisane przez IdP. Gdy obie opcje są `false`, co najmniej jedna z asercji lub odpowiedź muszą być podpisane.
* `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 zostanie zauważony w odpowiedzi SAML w polu `InResponseTo` Domyślnie: 28800000 (8 godzin).
* `OVERLEAF_SAML_LOGOUT_URL`
  * adres bazowy, do którego 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 dodatkowych parametrów zapytania, które mają zostać dodane do żądań 'logout'.
* `OVERLEAF_SAML_IS_ADMIN_FIELD` i `OVERLEAF_SAML_IS_ADMIN_FIELD_VALUE`
  * Gdy oba zmienne środowiskowe są ustawione, proces logowania aktualizuje `user.isAdmin = true` jeśli profil zwrócony przez IdP SAML zawiera atrybut określony przez `OVERLEAF_SAML_IS_ADMIN_FIELD` i jego wartość albo odpowiada `OVERLEAF_SAML_IS_ADMIN_FIELD_VALUE` albo 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 tylko na `true` podczas tworzenia użytkownika administracyjnego w Launchpad.

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

Obecna wersja Overleaf CE zawiera punkt końcowy do pobierania metadanych dostawcy usług: `http://my-overleaf-instance.com/saml/meta`

Dostawca tożsamości będzie musiał zostać skonfigurowany tak, aby rozpoznawał serwer Overleaf jako „Service Provider”. Zapoznaj się z dokumentacją swojego serwera SAML, aby uzyskać instrukcje, jak to zrobić.

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

<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...
[pominięto]
</ds:X509Certificate>
        </ds:X509Data>
      </ds:KeyInfo>
    </KeyDescriptor>
    <KeyDescriptor use="encryption">
      <ds:KeyInfo>
        <ds:X509Data>
          <ds:X509Certificate>MII...
[pominięto]
</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>

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

<details>

<summary><strong>Przykładowy plik variables.env (minimum)</strong></summary>

<pre><code>OVERLEAF_APP_NAME="Nasza instancja Overleaf"

ENABLED_LINKED_FILE_TYPES=project_file,project_output_file,url

# Umożliwia generowanie miniatur za pomocą ImageMagick
ENABLE_CONVERSIONS=true

# Wyłącza wymóg potwierdzenia adresu e-mail
EMAIL_CONFIRMATION_DISABLED=true

## Nginx
# NGINX_WORKER_PROCESSES=4
# NGINX_WORKER_CONNECTIONS=768

## Ustaw dla TLS przez nginx-proxy
# OVERLEAF_BEHIND_PROXY=true
# OVERLEAF_SECURE_COOKIE=true

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

OVERLEAF_LEFT_FOOTER=[{"text": "Skontaktuj się z zespołem wsparcia", "url": "mailto:support@example.com"}]
OVERLEAF_RIGHT_FOOTER=[{"text":"Cześć, jestem po prawej stronie", "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=Ten system jest obsługiwany przez dział 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
<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/pl/konfiguracja/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.
