> For the complete documentation index, see [llms.txt](https://ayakaleaf-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://ayakaleaf-pro.ayaka.space/on-premises/pl/konfiguracja/overleaf-toolkit/authentication/ldap-authentication.md).

# Uwierzytelnianie LDAP

Ta funkcja została opracowana przez [yu-i-i/overleaf-cep](https://github.com/yu-i-i/overleaf-cep). Oto kilka dokumentów dotyczących Twojej konfiguracji.

{% hint style="warning" %}
Overleaf używa **passport-ldapauth** biblioteki, która jest stosunkowo przestarzała, 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ć nieudane próby logowania. Dlatego, jeśli to możliwe, zaleca się wcześniej używać 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 w interfejsie WWW osobny formularz logowania LDAP, oddzielony od standardowej metody uwierzytelniania. Gdy użytkownik podaje swoją nazwę użytkownika LDAP i hasło, zaplecze 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 `serwera` obiektu config, który służy do konfiguracji `passport-ldapauth`. Jeśli masz problemy z konfiguracją LDAP, warto przeczytać plik README dla `passport-ldapauth` aby zorientować się, 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ą aktywne. Wartością tej zmiennej jest lista. Jeśli lista zawiera `ldap` to uwierzytelnianie LDAP zostanie aktywowane.

Na przykład: `EXTERNAL_AUTH=ldap saml`

W odróżnieniu od 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, próbuje się:

1. W katalogu LDAP wyszukiwany jest użytkownik LDAP przy użyciu filtra zdefiniowanego przez `OVERLEAF_LDAP_SEARCH_FILTER` i uwierzytelniany.
2. Jeśli uwierzytelnienie powiedzie się, w bazie danych użytkowników Overleaf sprawdzany jest użytkownik z głównym adresem e-mail pasującym do adresu e-mail uwierzytelnionego użytkownika LDAP:
   * Jeśli zostanie znaleziony pasujący użytkownik, pole `hashedPassword` dla tego użytkownika jest usuwane (jeśli istnieje). Zapewnia to, że użytkownik będzie w przyszłości mógł logować się wyłącznie za pomocą uwierzytelniania LDAP.
   * Jeśli nie zostanie znaleziony pasujący użytkownik, tworzony jest nowy użytkownik Overleaf przy użyciu adresu e-mail, imienia i nazwiska pobranych z serwera LDAP.

{% hint style="danger" %}
W przypadku 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)**
  * Adres URL serwera LDAP.
    * Przykład: `ldaps://ldap.example.com:636` (LDAP przez SSL)
    * Przykład: `ldap://ldap.example.com:389` (nieszyfrowane lub STARTTLS, jeśli skonfigurowano).
* `OVERLEAF_LDAP_IDENTITY_SERVICE_NAME`
  * Wyświetlana nazwa usługi tożsamości LDAP, używana na stronie logowania.
  * Domyślnie `Zaloguj się przez dostawcę 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 podano wiele adresów, użyty zostanie tylko pierwszy.
* `OVERLEAF_LDAP_FIRST_NAME_ATT`
  * Nazwa właściwości zawierająca imię użytkownika używanego w aplikacji, zwykle `givenName`.
* `OVERLEAF_LDAP_LAST_NAME_ATT`
  * Nazwa właściwości zawierająca nazwisko użytkownika używanego 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 jedna z dwóch poprzednich zmiennych nie jest zdefiniowana, z tej zmiennej wyodrębniane jest imię i/lub nazwisko użytkownika. W przeciwnym razie nie jest używana.
* `OVERLEAF_LDAP_PLACEHOLDER`
  * Tekst zastępczy w formularzu logowania, domyślnie `Nazwa użytkownika`.
* `OVERLEAF_LDAP_UPDATE_USER_DETAILS_ON_LOGIN`
  * Jeśli ustawione na `true`, aktualizuje użytkownika LDAP `first_name` i `last_name` pole podczas logowania i wyłącza formularz szczegółów użytkownika na stronie `/user/settings` dla użytkowników LDAP. W przeciwnym razie dane będą pobierane tylko przy pierwszym logowaniu.
* `OVERLEAF_LDAP_BIND_DN`
  * Nazwa wyróżniająca użytkownika LDAP, która ma być użyta 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 zdefiniowano, 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, względem której następuje wiązanie klienta, 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 zalogować się za pomocą e-maila lub nazwy logowania).
    * Przykład: `(sAMAccountName={{username}})` (Active Directory).
* `OVERLEAF_LDAP_SEARCH_SCOPE`
  * Zakres wyszukiwania może być `base`, `one`, albo `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 urzędów certyfikacji.
* `OVERLEAF_LDAP_CACHE`
  * Jeśli `true`, to jednocześnie będzie buforowanych do 100 poświadczeń przez 5 minut.
* `OVERLEAF_LDAP_TIMEOUT`
  * Jak długo klient ma pozwalać operacjom działać przed przekroczeniem limitu czasu, ms (domyślnie: nieskończoność).
* `OVERLEAF_LDAP_CONNECT_TIMEOUT`
  * Jak długo klient ma czekać przed przekroczeniem limitu czasu połączeń TCP, ms (domyślnie: ustawienie systemu operacyjnego).
* `OVERLEAF_LDAP_IS_ADMIN_ATT` i `OVERLEAF_LDAP_IS_ADMIN_ATT_VALUE`
  * Gdy obie 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ść pasuje do `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 tylko na `true` podczas tworzenia użytkownika administratora w Launchpad.

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

* `OVERLEAF_LDAP_CONTACTS_FILTER`
  * Filtr używany do wyszukiwania użytkowników na serwerze LDAP, którzy mają zostać załadowani do kontaktów. Tekst zastępczy '{{userProperty}}' w filtrze jest zastępowany wartością właściwości określonej przez `OVERLEAF_LDAP_CONTACTS_PROPERTY` użytkownika LDAP inicjującego wyszukiwanie. Jeśli nie zostanie 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 rozpoczyna się wyszukiwanie kontaktów. Domyślnie `OVERLEAF_LDAP_SEARCH_BASE`.
* `OVERLEAF_LDAP_CONTACTS_SEARCH_SCOPE`
  * Zakres wyszukiwania może być `base`, `one`, albo `sub` (domyślnie).
* `OVERLEAF_LDAP_CONTACTS_PROPERTY`
  * Określa właściwość obiektu użytkownika, która zastąpi tekst 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 spoza LDAP. Jeśli ta zmienna nie jest zdefiniowana, wynikowy filtr nie dopasuje niczego. Wartość `*` może być używana 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 spoza LDAP będą mieć 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="Our Overleaf Instance"

ENABLED_LINKED_FILE_TYPES=project_file,project_output_file,url

# Włącza generowanie miniatur za pomocą ImageMagick
ENABLE_CONVERSIONS=true

# Wyłącza wymaganie potwierdzenia e-maila
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='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='*'
```

</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://ayakaleaf-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.
