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

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

<Warning>
  Overleaf korzysta z biblioteki **passport-ldapauth**, która jest stosunkowo przestarzała, dlatego nie można w pełni zagwarantować zgodności z LDAP. W przypadku niektórych dostawców tożsamości LDAP (na przykład [https://goauthentik.io/](https://goauthentik.io/)) mogą występować błędy logowania. Dlatego, jeśli to możliwe, zalecamy w pierwszej kolejności korzystanie z metod OAuth/SAML. W przypadku goauthentik postępuj zgodnie z przetestowaną instrukcją [Krok po kroku: goauthentik](/pl/on-premises/configuration/overleaf-toolkit/authentication/ldap-authentication#krok-po-kroku-goauthentik) poniżej.
</Warning>

### Czym jest LDAP

LDAP to protokół uwierzytelniania używany do zewnętrznej weryfikacji tożsamości. Overleaf Server Pro udostępnia w interfejsie webowym dedykowany formularz logowania LDAP, oddzielny od standardowej metody uwierzytelniania. Gdy użytkownik przesyła swoją nazwę użytkownika i hasło LDAP, backend Overleaf weryfikuje dane uwierzytelniające na skonfigurowanym serwerze LDAP, na przykład `ldap://ldap:10389`.

<Frame caption="Przykład LDAP w Server Pro">
  <img src="https://mintcdn.com/ayakaleaf-pro/x9kfDjtWlyyhG_mR/images/on-premises/image-29.png?fit=max&auto=format&n=x9kfDjtWlyyhG_mR&q=85&s=f3ebcacecec45115cf9b1fa55eb1ba94" alt="" width="2804" height="2005" data-path="images/on-premises/image-29.png" />
</Frame>

### Konfiguracja

Wewnętrznie mechanizm LDAP w Overleaf korzysta z biblioteki [passport-ldapauth](https://github.com/vesse/passport-ldapauth). Większość opcji konfiguracyjnych jest przekazywana do obiektu konfiguracyjnego `server`, który służy do konfigurowania `passport-ldapauth`. Jeśli masz problemy z konfiguracją LDAP, warto przeczytać README biblioteki `passport-ldapauth`, aby zorientować się, jakiej konfiguracji oczekuje.

Do włączenia modułu uwierzytelniania LDAP 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 `ldap`, uwierzytelnianie LDAP zostanie aktywowane.

Na przykład: `EXTERNAL_AUTH=ldap saml`

W odróżnieniu od Overleaf CEP, w naszej edycji ayaka-notes uwierzytelnianie LDAP ograniczamy do czystej metody uwierzytelniania, dostępnej pod adresem `http://your-overleaf.com/ldap/login`.

Gdy używana jest metoda uwierzytelniania LDAP, a użytkownik wpisze w formularzu logowania `username` i `password`, wykonywane są następujące kroki:

1. Użytkownik LDAP jest wyszukiwany w katalogu LDAP przy użyciu filtra zdefiniowanego w `OVERLEAF_LDAP_SEARCH_FILTER`, a następnie uwierzytelniany.
2. Jeśli uwierzytelnienie się powiedzie, w bazie użytkowników Overleaf wyszukiwany jest użytkownik, którego główny adres e-mail odpowiada adresowi e-mail uwierzytelnionego użytkownika LDAP:
   * Jeśli zostanie znaleziony pasujący użytkownik, pole `hashedPassword` tego użytkownika jest usuwane (jeśli istnieje). Dzięki temu w przyszłości użytkownik będzie mógł logować się wyłącznie przez uwierzytelnianie LDAP.
   * Jeśli pasujący użytkownik nie zostanie znaleziony, tworzony jest nowy użytkownik Overleaf z adresem e-mail, imieniem i nazwiskiem pobranymi z serwera LDAP.

<Danger>
  W przypadku użytkowników logujących się przez LDAP nie przechowujemy zahaszowanych haseł w bazie danych mongo Overleaf (a istniejące usuwamy).
</Danger>

#### Zmienne środowiskowe

* `OVERLEAF_LDAP_URL` <strong>(wymagana)</strong>
  * Adres URL serwera LDAP.
    * Przykład: `ldaps://ldap.example.com:636` (LDAP przez SSL)
    * Przykład: `ldap://ldap.example.com:389` (bez szyfrowania lub STARTTLS, jeśli jest skonfigurowany).
* `OVERLEAF_LDAP_IDENTITY_SERVICE_NAME`
  * Wyświetlana nazwa usługi tożsamości LDAP, używana na stronie logowania.
  * Domyślnie `Log in with LDAP Provider`.
* `OVERLEAF_LDAP_EMAIL_ATT`
  * Atrybut adresu e-mail zwracany przez serwer LDAP, domyślnie `mail`. Każdy użytkownik LDAP musi mieć co najmniej jeden adres e-mail. Jeśli podano kilka adresów, używany jest tylko pierwszy.
* `OVERLEAF_LDAP_FIRST_NAME_ATT`
  * Nazwa właściwości zawierającej imię użytkownika używane w aplikacji, zwykle `givenName`.
* `OVERLEAF_LDAP_LAST_NAME_ATT`
  * Nazwa właściwości zawierającej nazwisko użytkownika używane w aplikacji, zwykle `sn`.
* `OVERLEAF_LDAP_NAME_ATT`
  * Nazwa właściwości zawierającej pełne imię i nazwisko użytkownika, zwykle `cn`. Jeśli któraś z dwóch poprzednich zmiennych nie jest zdefiniowana, imię i/lub nazwisko użytkownika jest wyodrębniane z tej wartości. W przeciwnym razie nie jest ona używana.
* `OVERLEAF_LDAP_PLACEHOLDER`
  * Tekst zastępczy (placeholder) w formularzu logowania, domyślnie `Username`.
* `OVERLEAF_LDAP_UPDATE_USER_DETAILS_ON_LOGIN`
  * Jeśli ustawiona na `true`, przy logowaniu aktualizuje pola `first_name` i `last_name` użytkownika LDAP oraz wyłącza formularz danych użytkownika na stronie `/user/settings` dla użytkowników LDAP. W przeciwnym razie dane są pobierane tylko przy pierwszym logowaniu.
* `OVERLEAF_LDAP_BIND_DN`
  * Nazwa wyróżniająca (DN) użytkownika LDAP, który ma być używany do połączenia z LDAP (ten użytkownik powinien mieć możliwość wyszukiwania/wyświetlania kont na serwerze LDAP), np. `cn=ldap_reader,dc=example,dc=com`. Jeśli nie jest zdefiniowana, używane jest wiązanie anonimowe.
* `OVERLEAF_LDAP_BIND_CREDENTIALS`
  * Hasło dla `OVERLEAF_LDAP_BIND_DN`.
* `OVERLEAF_LDAP_BIND_PROPERTY`
  * Właściwość użytkownika używana do wiązania z klientem, domyślnie `dn`.
* `OVERLEAF_LDAP_SEARCH_BASE` <strong>(wymagana)</strong>
  * Bazowy DN, od którego rozpoczyna się wyszukiwanie użytkowników. Np. `ou=people,dc=example,dc=com`.
* `OVERLEAF_LDAP_SEARCH_FILTER`
  * Filtr wyszukiwania LDAP służący do znalezienia użytkownika. Użyj literału '\{\{username}}', aby podana nazwa użytkownika została wstawiona do wyszukiwania LDAP.
    * Przykład: `(|(uid={{username}})(mail={{username}}))` (użytkownik może logować się adresem e-mail lub nazwą logowania).
    * Przykład: `(sAMAccountName={{username}})` (Active Directory).
* `OVERLEAF_LDAP_SEARCH_SCOPE`
  * Zakres wyszukiwania może mieć wartość `base`, `one` lub `sub` (domyślnie).
* `OVERLEAF_LDAP_SEARCH_ATTRIBUTES`
  * Tablica JSON atrybutów pobieranych z serwera LDAP, np. `["uid", "mail", "givenName", "sn"]`. Domyślnie pobierane są wszystkie atrybuty.
* `OVERLEAF_LDAP_STARTTLS`
  * Jeśli `true`, używany jest LDAP przez TLS.
* `OVERLEAF_LDAP_TLS_OPTS_CA_PATH`
  * Ścieżka do pliku z certyfikatem CA używanym do weryfikacji certyfikatu SSL/TLS serwera LDAP. Jeśli certyfikatów jest kilka, może to być tablica JSON ze ścieżkami do certyfikatów. Pliki muszą być dostępne dla kontenera Docker.
    * Przykład (jeden certyfikat): `/var/lib/overleaf/certs/ldap_ca_cert.pem`
    * Przykład (wiele certyfikatów): `["/var/lib/overleaf/certs/ldap_ca_cert1.pem", "/var/lib/overleaf/certs/ldap_ca_cert2.pem"]`
* `OVERLEAF_LDAP_TLS_OPTS_REJECT_UNAUTH`
  * Jeśli `true`, certyfikat serwera jest weryfikowany względem listy podanych CA.
* `OVERLEAF_LDAP_CACHE`
  * Jeśli `true`, jednocześnie do 100 danych uwierzytelniających będzie przechowywanych w pamięci podręcznej przez 5 minut.
* `OVERLEAF_LDAP_TIMEOUT`
  * Jak długo klient pozwala na trwanie operacji przed przekroczeniem limitu czasu, w ms (domyślnie: Infinity).
* `OVERLEAF_LDAP_CONNECT_TIMEOUT`
  * Jak długo klient czeka na nawiązanie połączenia TCP przed przekroczeniem limitu czasu, w ms (domyślnie: wartość domyślna systemu operacyjnego).
* `OVERLEAF_LDAP_IS_ADMIN_ATT` i `OVERLEAF_LDAP_IS_ADMIN_ATT_VALUE`
  * Gdy ustawione są obie zmienne środowiskowe, proces logowania ustawia `user.isAdmin = true`, jeśli profil LDAP zawiera atrybut wskazany przez `OVERLEAF_LDAP_IS_ADMIN_ATT`, a jego wartość jest równa `OVERLEAF_LDAP_IS_ADMIN_ATT_VALUE` lub jest tablicą zawierającą `OVERLEAF_LDAP_IS_ADMIN_ATT_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 konta administratora w Launchpad.

Poniższe pięć zmiennych służy do konfigurowania sposobu pobierania kontaktów użytkownika z serwera LDAP.

* `OVERLEAF_LDAP_CONTACTS_FILTER`
  * Filtr używany do wyszukiwania na serwerze LDAP użytkowników, którzy mają zostać wczytani do kontaktów. Symbol zastępczy '\{\{userProperty}}' w filtrze jest zastępowany wartością właściwości wskazanej przez `OVERLEAF_LDAP_CONTACTS_PROPERTY` użytkownika LDAP inicjującego wyszukiwanie. Jeśli zmienna nie jest zdefiniowana, żaden użytkownik nie jest pobierany z serwera LDAP do kontaktów.
* `OVERLEAF_LDAP_CONTACTS_SEARCH_BASE`
  * Określa bazowy DN, od którego rozpoczyna się wyszukiwanie kontaktów. Domyślnie `OVERLEAF_LDAP_SEARCH_BASE`.
* `OVERLEAF_LDAP_CONTACTS_SEARCH_SCOPE`
  * Zakres wyszukiwania może mieć wartość `base`, `one` lub `sub` (domyślnie).
* `OVERLEAF_LDAP_CONTACTS_PROPERTY`
  * Określa właściwość obiektu użytkownika, która zastąpi symbol zastępczy '\{\{userProperty}}' w `OVERLEAF_LDAP_CONTACTS_FILTER`.
* `OVERLEAF_LDAP_CONTACTS_NON_LDAP_VALUE`
  * Określa wartość `OVERLEAF_LDAP_CONTACTS_PROPERTY`, jeśli wyszukiwanie inicjuje użytkownik spoza LDAP. Jeśli ta zmienna nie jest zdefiniowana, wynikowy filtr nie dopasuje niczego. Wartość `*` może być używana jako symbol wieloznaczny.

<Accordion title="Przykład">
  ```text theme={null}
  OVERLEAF_LDAP_CONTACTS_FILTER=(gidNumber={{userProperty}})
  OVERLEAF_LDAP_CONTACTS_PROPERTY=gidNumber
  OVERLEAF_LDAP_CONTACTS_NON_LDAP_VALUE=1000
  ```

  Powyższy przykład powoduje wczytanie do kontaktów bieżącego użytkownika LDAP wszystkich użytkowników LDAP, którzy mają ten sam UNIX-owy `gid`. Użytkownicy spoza LDAP będą mieli w kontaktach wszystkich użytkowników LDAP z UNIX-owym `gid=1000`.
</Accordion>

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

  #################
  ## LDAP for CE ##
  #################

  EXTERNAL_AUTH=ldap
  OVERLEAF_LDAP_URL=ldap://ldap.example.com:389
  OVERLEAF_LDAP_STARTTLS=true
  OVERLEAF_LDAP_TLS_OPTS_CA_PATH=/var/lib/overleaf/certs/ldap_ca_cert.pem
  OVERLEAF_LDAP_SEARCH_BASE=ou=people,dc=example,dc=com
  OVERLEAF_LDAP_SEARCH_FILTER=(|(uid={{username}})(mail={{username}}))
  OVERLEAF_LDAP_BIND_DN=cn=ldap_reader,dc=example,dc=com
  OVERLEAF_LDAP_BIND_CREDENTIALS=GoodNewsEveryone
  OVERLEAF_LDAP_EMAIL_ATT=mail
  OVERLEAF_LDAP_FIRST_NAME_ATT=givenName
  OVERLEAF_LDAP_LAST_NAME_ATT=sn
  # OVERLEAF_LDAP_NAME_ATT=cn
  OVERLEAF_LDAP_SEARCH_ATTRIBUTES=["uid", "sn", "givenName", "mail"]

  OVERLEAF_LDAP_UPDATE_USER_DETAILS_ON_LOGIN=true

  OVERLEAF_LDAP_PLACEHOLDER='Username or email address'

  OVERLEAF_LDAP_IS_ADMIN_ATT=mail
  OVERLEAF_LDAP_IS_ADMIN_ATT_VALUE=admin@example.com

  OVERLEAF_LDAP_CONTACTS_FILTER=(gidNumber={{userProperty}})
  OVERLEAF_LDAP_CONTACTS_PROPERTY=gidNumber
  OVERLEAF_LDAP_CONTACTS_NON_LDAP_VALUE='*'
  ```
</Accordion>

## Krok po kroku: goauthentik

Poniżej opisano konfigurację przetestowaną z [goauthentik](https://goauthentik.io/). W przykładach użyto Base DN `dc=example,dc=com`; zastąp go własnym.

<Steps>
  <Step title="Utwórz konto do wiązania (bind)">
    Overleaf najpierw loguje się do katalogu za pomocą własnego konta, aby znaleźć użytkownika. W Authentik otwórz **Directory > Users**, kliknij **New User**, wybierz **Internal User** i kliknij **Next**. Wpisz nazwę użytkownika, na przykład `ldapservice`, i kliknij **Create**:

    <Frame caption="Authentik: tworzenie konta do wiązania">
      <img src="https://mintcdn.com/ayakaleaf-pro/TjqwH4XzxYAkHStq/images/on-premises/ldap-authentik-user-create.png?fit=max&auto=format&n=TjqwH4XzxYAkHStq&q=85&s=bf5d9a5aefd048781339157121a9e203" alt="" width="1120" height="810" data-path="images/on-premises/ldap-authentik-user-create.png" />
    </Frame>

    Otwórz nowego użytkownika i kliknij **Set password**. To hasło należy wpisać do `OVERLEAF_LDAP_BIND_CREDENTIALS`:

    <div style={{ textAlign: "center" }}>
      <Frame caption="Authentik: ustawianie hasła konta do wiązania (instancja testowa)">
        <img src="https://mintcdn.com/ayakaleaf-pro/TjqwH4XzxYAkHStq/images/on-premises/ldap-authentik-user-page.png?fit=max&auto=format&n=TjqwH4XzxYAkHStq&q=85&s=96aad0f919dc8e74fef5995b1dde1e78" alt="" width="207" data-path="images/on-premises/ldap-authentik-user-page.png" />
      </Frame>
    </div>

    Zanotuj numer użytkownika widoczny w pasku adresu, na przykład `19` w `…/#/identity/users/19`. Będzie potrzebny w kroku 3.
  </Step>

  <Step title="Utwórz dostawcę i aplikację">
    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-ldap`, i kliknij **Next**:

    <Frame caption="Authentik: nazwa i slug aplikacji">
      <img src="https://mintcdn.com/ayakaleaf-pro/TjqwH4XzxYAkHStq/images/on-premises/ldap-authentik-app.png?fit=max&auto=format&n=TjqwH4XzxYAkHStq&q=85&s=0d3e6b54e9bf552bd81d8b1d6b722701" alt="" width="1120" height="810" data-path="images/on-premises/ldap-authentik-app.png" />
    </Frame>

    2\. Wybierz **LDAP Provider** i kliknij **Next**:

    <Frame caption="Authentik: wybór dostawcy LDAP">
      <img src="https://mintcdn.com/ayakaleaf-pro/TjqwH4XzxYAkHStq/images/on-premises/ldap-authentik-type.png?fit=max&auto=format&n=TjqwH4XzxYAkHStq&q=85&s=ee63f2682051572a08c1f5bc321a1af6" alt="" width="1120" height="810" data-path="images/on-premises/ldap-authentik-type.png" />
    </Frame>

    3\. Ustaw **Bind Mode** na **Direct binding**, a **Search Mode** na **Direct querying**:

    <Frame caption="Authentik: tryb wiązania i wyszukiwania dostawcy LDAP">
      <img src="https://mintcdn.com/ayakaleaf-pro/TjqwH4XzxYAkHStq/images/on-premises/ldap-authentik-modes.png?fit=max&auto=format&n=TjqwH4XzxYAkHStq&q=85&s=ea147f1605e76142021d07f775d5ef53" alt="" width="1120" height="810" data-path="images/on-premises/ldap-authentik-modes.png" />
    </Frame>

    4\. Niżej ustaw **Bind Flow** na `default-authentication-flow`, a **Base DN** na swój Base DN, na przykład `dc=example,dc=com`:

    <Frame caption="Authentik: przepływ wiązania i Base DN dostawcy LDAP">
      <img src="https://mintcdn.com/ayakaleaf-pro/TjqwH4XzxYAkHStq/images/on-premises/ldap-authentik-basedn.png?fit=max&auto=format&n=TjqwH4XzxYAkHStq&q=85&s=4ce418571d83294ee749d56b13c63d44" alt="" width="1120" height="810" data-path="images/on-premises/ldap-authentik-basedn.png" />
    </Frame>

    5\. Klikaj **Next** aż do ostatniej strony i zatwierdź aplikację.
  </Step>

  <Step title="Zezwól kontu do wiązania na przeszukiwanie katalogu">
    Bez tego uprawnienia konto do wiązania widzi tylko siebie, wyszukiwanie nie znajduje żadnego użytkownika i każde logowanie LDAP kończy się niepowodzeniem.

    Otwórz dostawcę, przejdź do **Permissions** i kliknij **Assign Role Object Permission**. W polu **Role** wpisz numer z kroku 1 i wybierz `ak-managed-role--user-<number>`, a następnie włącz **Search full LDAP directory**:

    <Frame caption="Authentik: nadawanie kontu do wiązania uprawnienia wyszukiwania (instancja testowa)">
      <img src="https://mintcdn.com/ayakaleaf-pro/TjqwH4XzxYAkHStq/images/on-premises/ldap-authentik-assign.png?fit=max&auto=format&n=TjqwH4XzxYAkHStq&q=85&s=5af53c691ae845adcb4ede42c24fb600" alt="" width="1120" height="529" data-path="images/on-premises/ldap-authentik-assign.png" />
    </Frame>

    Rola pokazuje wtedy znacznik wyboru w kolumnie **Search full LDAP directory**:

    <Frame caption="Authentik: uprawnienia dostawcy LDAP (instancja testowa)">
      <img src="https://mintcdn.com/ayakaleaf-pro/TjqwH4XzxYAkHStq/images/on-premises/ldap-authentik-permissions.png?fit=max&auto=format&n=TjqwH4XzxYAkHStq&q=85&s=24ae7f0dfb6d19e1b3d6584d6ccf0f0b" alt="" width="990" height="488" data-path="images/on-premises/ldap-authentik-permissions.png" />
    </Frame>
  </Step>

  <Step title="Uruchom outpost LDAP">
    Authentik obsługuje LDAP przez outpost, czyli osobny kontener. Otwórz **Applications > Outposts**, utwórz outpost typu **LDAP** ze swoim dostawcą i wdróż go zgodnie z opisem Authentik. Nasłuchuje on na porcie 389 hosta, na którym działa. Gdy jest połączony, wyświetla zielony znacznik:

    <Frame caption="Authentik: działający outpost LDAP (instancja testowa)">
      <img src="https://mintcdn.com/ayakaleaf-pro/TjqwH4XzxYAkHStq/images/on-premises/ldap-authentik-outposts.png?fit=max&auto=format&n=TjqwH4XzxYAkHStq&q=85&s=cd8af2f7df7b2df24d2369416509faef" alt="" width="990" height="468" data-path="images/on-premises/ldap-authentik-outposts.png" />
    </Frame>

    ```dotenv theme={null}
    OVERLEAF_LDAP_URL=ldap://ldap.example.com:389
    ```
  </Step>

  <Step title="Uzupełnij DN">
    Strona dostawcy pokazuje Base DN i przykład w sekcji **How to connect**:

    <Frame caption="Authentik: przegląd dostawcy LDAP (instancja testowa)">
      <img src="https://mintcdn.com/ayakaleaf-pro/TjqwH4XzxYAkHStq/images/on-premises/ldap-authentik-provider.png?fit=max&auto=format&n=TjqwH4XzxYAkHStq&q=85&s=9aa4b747f4c0f51533454a97d835c18c" alt="" width="990" height="773" data-path="images/on-premises/ldap-authentik-provider.png" />
    </Frame>

    Nie kopiuj przykładowych wartości bez zmian:

    * **Bind DN** pokazuje konto, na które jesteś zalogowany. Zamiast tego użyj konta do wiązania z kroku 1: `cn=ldapservice,ou=users,<Base DN>`.
    * **Search base** pokazuje Base DN. Użyj `ou=users,<Base DN>`.

    ```dotenv theme={null}
    OVERLEAF_LDAP_BIND_DN=cn=ldapservice,ou=users,dc=example,dc=com
    OVERLEAF_LDAP_BIND_CREDENTIALS=<password of ldapservice>
    OVERLEAF_LDAP_SEARCH_BASE=ou=users,dc=example,dc=com
    OVERLEAF_LDAP_SEARCH_FILTER=(cn={{username}})
    ```

    <Warning>
      Authentik przechowuje w `ou=virtual-groups` grupę o nazwie każdego użytkownika. Przeszukanie całego Base DN pod kątem `(cn=alice)` znajduje zarówno `cn=alice,ou=users,…`, jak i `cn=alice,ou=virtual-groups,…`, a Overleaf odrzuca logowanie pasujące do więcej niż jednego wpisu. Pozostaw bazę wyszukiwania ustawioną na `ou=users,<Base DN>`.
    </Warning>
  </Step>

  <Step title="Sprawdź wyszukiwanie">
    Przed uruchomieniem Overleaf wykonaj wyszukiwanie, które będzie on przeprowadzał. Musi ono wypisać dokładnie jeden wiersz `dn:`:

    ```shell theme={null}
    ldapsearch -x -H ldap://ldap.example.com:389 \
      -D cn=ldapservice,ou=users,dc=example,dc=com -w '<password of ldapservice>' \
      -b ou=users,dc=example,dc=com '(cn=alice)' dn
    ```

    Brak jakiegokolwiek `dn:` zwykle oznacza, że brakuje uprawnienia z kroku 3.
  </Step>

  <Step title="Zmapuj administratorów (opcjonalnie)">
    Grupy użytkownika znajdują się w `memberOf` jako DN w `ou=groups`. Aby członkowie grupy Authentik `Admins` stali się administratorami Overleaf:

    ```dotenv theme={null}
    OVERLEAF_LDAP_IS_ADMIN_ATT=memberOf
    OVERLEAF_LDAP_IS_ADMIN_ATT_VALUE=cn=Admins,ou=groups,dc=example,dc=com
    ```

    <Warning>
      Flaga administratora jest aktualizowana przy każdym logowaniu LDAP. Przy błędnym atrybucie lub wartości każdy administrator logujący się przez LDAP 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=ldap
  OVERLEAF_LDAP_IDENTITY_SERVICE_NAME=Log in with Authentik
  OVERLEAF_LDAP_URL=ldap://ldap.example.com:389
  OVERLEAF_LDAP_BIND_DN=cn=ldapservice,ou=users,dc=example,dc=com
  OVERLEAF_LDAP_BIND_CREDENTIALS=<password of ldapservice>
  OVERLEAF_LDAP_SEARCH_BASE=ou=users,dc=example,dc=com
  OVERLEAF_LDAP_SEARCH_FILTER=(cn={{username}})
  OVERLEAF_LDAP_EMAIL_ATT=mail
  OVERLEAF_LDAP_NAME_ATT=name
  OVERLEAF_LDAP_IS_ADMIN_ATT=memberOf
  OVERLEAF_LDAP_IS_ADMIN_ATT_VALUE=cn=Admins,ou=groups,dc=example,dc=com
  OVERLEAF_LDAP_UPDATE_USER_DETAILS_ON_LOGIN=true
  ```
</Accordion>


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