> 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/ldap-authentication.md).

# Uwierzytelnianie LDAP

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.

{% hint style="warning" %}
Overleaf używa **passport-ldapauth** biblioteki, która jest stosunkowo przestarzała, dlatego zgodność z LDAP nie może być w pełni zagwarantowana. W przypadku niektórych dostawców tożsamości LDAP (na przykład, <https://goauthentik.io/>), mogą wystąpić niepowodzenia logowania. Dlatego, jeśli to możliwe, zaleca się wcześniej użyć metody OAuth/SAML.
{% endhint %}

### Czym jest LDAP

LDAP to protokół uwierzytelniania używany do zewnętrznej weryfikacji tożsamości. Overleaf Server Pro udostępnia dedykowany formularz logowania LDAP w interfejsie webowym, oddzielony od standardowej metody uwierzytelniania. Gdy użytkownik poda swoją nazwę użytkownika LDAP i hasło, backend Overleaf weryfikuje poświadczenia względem skonfigurowanego serwera LDAP, na przykład `ldap://ldap:10389`.

<figure><img src="/files/cbd467c0b25b627c16a4c344855ffdbe258f50d7" alt=""><figcaption><p>Przykład LDAP dla Server Pro</p></figcaption></figure>

### Konfiguracja

Wewnętrznie Overleaf LDAP używa [passport-ldapauth](https://github.com/vesse/passport-ldapauth) biblioteki. Większość z tych opcji konfiguracyjnych jest przekazywana do `serwer` obiektu config, który jest używany do konfiguracji `passport-ldapauth`. Jeśli masz problemy z konfiguracją LDAP, warto przeczytać README dla `passport-ldapauth` aby wyczuć, jakiej konfiguracji oczekuje.

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

Na przykład: `EXTERNAL_AUTH=ldap saml`

W przeciwieństwie do Overleaf CEP, w naszej edycji ayaka-notes ograniczamy uwierzytelnianie LDAP do czystej metody uwierzytelniania, która jest dostępna pod adresem `http://your-overleaf.com/ldap/login`.

Podczas korzystania z metod uwierzytelniania LDAP użytkownik wpisuje `nazwę użytkownika` i `hasło` w formularzu logowania, następuje próba:

1. Użytkownik LDAP jest wyszukiwany w katalogu LDAP przy użyciu filtra zdefiniowanego przez `OVERLEAF_LDAP_SEARCH_FILTER` i uwierzytelniany.
2. Jeśli uwierzytelnianie się powiedzie, baza danych użytkowników Overleaf jest sprawdzana pod kątem użytkownika, którego podstawowy adres e-mail odpowiada adresowi e-mail uwierzytelnionego użytkownika LDAP:
   * Jeśli zostanie znaleziony pasujący użytkownik, `hashedPassword` pole dla tego użytkownika jest usuwane (jeśli istnieje). Zapewnia to, że użytkownik będzie mógł w przyszłości logować się wyłącznie za pomocą uwierzytelniania LDAP.
   * Jeśli nie zostanie znaleziony pasujący użytkownik, nowy użytkownik Overleaf jest tworzony przy użyciu adresu e-mail, imienia i nazwiska pobranych z serwera LDAP.

{% hint style="danger" %}
Dla użytkowników logujących się przez LDAP nie przechowujemy (ani nie usuwamy istniejących) zahaszowanych haseł w bazie danych Mongo Overleaf.
{% endhint %}

#### Zmienne środowiskowe

* `OVERLEAF_LDAP_URL` **(wymagane)**
  * URL serwera LDAP.
    * Przykład: `ldaps://ldap.example.com:636` (LDAP przez SSL)
    * Przykład: `ldap://ldap.example.com:389` (szyfrowane lub STARTTLS, jeśli skonfigurowano).
* `OVERLEAF_LDAP_IDENTITY_SERVICE_NAME`
  * Nazwa wyświetlana usługi tożsamości LDAP, używana na stronie logowania.
  * Domyślnie `Zaloguj się za pomocą dostawcy LDAP`.
* `OVERLEAF_LDAP_EMAIL_ATT`
  * Atrybut e-mail zwracany przez serwer LDAP, domyślnie `mail`. Każdy użytkownik LDAP musi mieć co najmniej jeden adres e-mail. Jeśli podanych jest wiele adresów, użyty zostanie tylko pierwszy.
* `OVERLEAF_LDAP_FIRST_NAME_ATT`
  * Nazwa właściwości zawierająca imię użytkownika, używana w aplikacji, zwykle `givenName`.
* `OVERLEAF_LDAP_LAST_NAME_ATT`
  * Nazwa właściwości zawierająca nazwisko użytkownika, używana w aplikacji, zwykle `sn`.
* `OVERLEAF_LDAP_NAME_ATT`
  * Nazwa właściwości zawierająca pełne imię i nazwisko użytkownika, zwykle `cn`. Jeśli którakolwiek z dwóch poprzednich zmiennych nie jest zdefiniowana, imię i/lub nazwisko użytkownika są pobierane z tej zmiennej. W przeciwnym razie nie jest ona używana.
* `OVERLEAF_LDAP_PLACEHOLDER`
  * Tekst zastępczy dla formularza logowania, domyślnie `Nazwa użytkownika`.
* `OVERLEAF_LDAP_UPDATE_USER_DETAILS_ON_LOGIN`
  * Jeśli ustawione na `true`, aktualizuje LDAP użytkownika `imię` i `nazwisko` pole podczas logowania i wyłącza formularz danych użytkownika na stronie `/user/settings` dla użytkowników LDAP. W przeciwnym razie szczegóły będą pobierane tylko przy pierwszym logowaniu.
* `OVERLEAF_LDAP_BIND_DN`
  * Nazwa wyróżniona użytkownika LDAP, która ma być używana do połączenia LDAP (ten użytkownik powinien mieć możliwość wyszukiwania/listowania kont na serwerze LDAP), np. `cn=ldap_reader,dc=example,dc=com`. Jeśli nie jest zdefiniowana, używane jest anonimowe wiązanie.
* `OVERLEAF_LDAP_BIND_CREDENTIALS`
  * Hasło dla `OVERLEAF_LDAP_BIND_DN`.
* `OVERLEAF_LDAP_BIND_PROPERTY`
  * Właściwość użytkownika, według której następuje wiązanie z klientem, domyślnie `dn`.
* `OVERLEAF_LDAP_SEARCH_BASE` **(wymagane)**
  * 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, za pomocą którego znajduje się użytkownika. Użyj dosłownego '{{username}}', aby podana nazwa użytkownika została wstawiona do wyszukiwania LDAP.
    * Przykład: `(|(uid={{username}})(mail={{username}}))` (użytkownik może logować się przez e-mail lub nazwę logowania).
    * Przykład: `(sAMAccountName={{username}})` (Active Directory).
* `OVERLEAF_LDAP_SEARCH_SCOPE`
  * Zakres wyszukiwania może być `base`, `one`, lub `sub` (domyślnie).
* `OVERLEAF_LDAP_SEARCH_ATTRIBUTES`
  * Tablica JSON atrybutów do pobrania 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 zawierającego certyfikat CA używany do weryfikacji certyfikatu SSL/TLS serwera LDAP. Jeśli jest wiele certyfikatów, może to być tablica JSON ścieżek 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 dostarczonych CA.
* `OVERLEAF_LDAP_CACHE`
  * Jeśli `true`, wtedy jednocześnie będzie buforowanych do 100 poświadczeń przez 5 minut.
* `OVERLEAF_LDAP_TIMEOUT`
  * Jak długo klient powinien pozwalać operacjom działać przed przekroczeniem limitu czasu, ms (domyślnie: Infinity).
* `OVERLEAF_LDAP_CONNECT_TIMEOUT`
  * Jak długo klient powinien czekać przed przekroczeniem limitu czasu dla połączeń TCP, ms (domyślnie: wartość systemu operacyjnego).
* `OVERLEAF_LDAP_IS_ADMIN_ATT` i `OVERLEAF_LDAP_IS_ADMIN_ATT_VALUE`
  * Gdy oba zmienne środowiskowe są ustawione, proces logowania aktualizuje `user.isAdmin = true` jeśli profil LDAP zawiera atrybut określony przez `OVERLEAF_LDAP_IS_ADMIN_ATT` i jego wartość albo odpowiada `OVERLEAF_LDAP_IS_ADMIN_ATT_VALUE` albo 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 tylko na `true` podczas tworzenia użytkownika administracyjnego w Launchpad.

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

* `OVERLEAF_LDAP_CONTACTS_FILTER`
  * Filtr używany do wyszukiwania użytkowników w serwerze LDAP, którzy mają zostać załadowani do kontaktów. Element zastępczy '{{userProperty}}' w filtrze zostaje zastąpiony wartością właściwości określonej przez `OVERLEAF_LDAP_CONTACTS_PROPERTY` z użytkownika LDAP inicjującego wyszukiwanie. Jeśli nie jest zdefiniowana, żaden użytkownik nie zostanie pobrany z serwera LDAP do kontaktów.
* `OVERLEAF_LDAP_CONTACTS_SEARCH_BASE`
  * Określa bazowy DN, od którego należy rozpocząć wyszukiwanie kontaktów. Domyślnie `OVERLEAF_LDAP_SEARCH_BASE`.
* `OVERLEAF_LDAP_CONTACTS_SEARCH_SCOPE`
  * Zakres wyszukiwania może być `base`, `one`, lub `sub` (domyślnie).
* `OVERLEAF_LDAP_CONTACTS_PROPERTY`
  * Określa właściwość obiektu użytkownika, która zastąpi element zastępczy '{{userProperty}}' w `OVERLEAF_LDAP_CONTACTS_FILTER`.
* `OVERLEAF_LDAP_CONTACTS_NON_LDAP_VALUE`
  * Określa wartość `OVERLEAF_LDAP_CONTACTS_PROPERTY` jeśli wyszukiwanie jest inicjowane przez użytkownika niebędącego LDAP. Jeśli ta zmienna nie jest zdefiniowana, wynikowy filtr nie dopasuje niczego. Wartość `*` może być użyta jako symbol wieloznaczny.

<details>

<summary><strong>Przykład</strong></summary>

```
OVERLEAF_LDAP_CONTACTS_FILTER=(gidNumber={{userProperty}})
OVERLEAF_LDAP_CONTACTS_PROPERTY=gidNumber
OVERLEAF_LDAP_CONTACTS_NON_LDAP_VALUE=1000
```

Powyższy przykład powoduje załadowanie do kontaktów bieżącego użytkownika LDAP wszystkich użytkowników LDAP, którzy mają ten sam UNIX `gid`. Użytkownicy niebędący LDAP będą mieli w kontaktach wszystkich użytkowników LDAP z UNIX `gid=1000` w swoich kontaktach.

</details>

<details>

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

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

#################
## LDAP dla 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='Nazwa użytkownika lub adres e-mail'

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='*'
```

</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/ldap-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.
