> 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/on-premises-cs/konfigurace/overleaf-toolkit/authentication/ldap-authentication.md).

# Ověřování LDAP

Tato funkce byla vyvinuta [yu-i-i/overleaf-cep](https://github.com/yu-i-i/overleaf-cep). Zde nabízíme několik dokumentů pro vaši konfiguraci.

{% hint style="warning" %}
Overleaf používá **passport-ldapauth** knihovnu, která je poměrně zastaralá, nelze kompatibilitu s LDAP plně zaručit. U některých poskytovatelů identity LDAP (například <https://goauthentik.io/>), mohou se vyskytnout chyby při přihlašování. Proto se, pokud je to možné, doporučuje dříve používat OAuth/SAML metodu.
{% endhint %}

### Co je LDAP

LDAP je autentizační protokol používaný pro ověřování externí identity. Overleaf Server Pro poskytuje ve webovém rozhraní samostatný přihlašovací formulář pro LDAP, oddělený od standardní metody autentizace. Když uživatel odešle své uživatelské jméno a heslo pro LDAP, backend Overleaf ověří údaje vůči nakonfigurovanému serveru LDAP, například `ldap://ldap:10389`.

<figure><img src="/files/91611cd93d318b928725ca74f916af23078ada90" alt=""><figcaption><p>Příklad LDAP pro Server Pro</p></figcaption></figure>

### Konfigurace

Interně Overleaf LDAP používá [passport-ldapauth](https://github.com/vesse/passport-ldapauth) knihovnu. Většina z těchto konfiguračních možností se předává do `serveru` konfiguračního objektu, který se používá ke konfiguraci `passport-ldapauth`. Pokud máte potíže s konfigurací LDAP, vyplatí se přečíst README pro `passport-ldapauth` abyste získali představu o konfiguraci, kterou očekává.

Proměnná prostředí `EXTERNAL_AUTH` je vyžadována k aktivaci modulu autentizace LDAP. Tato proměnná prostředí určuje, které metody externí autentizace jsou aktivovány. Hodnota této proměnné je seznam. Pokud seznam obsahuje `ldap` pak se aktivuje autentizace LDAP.

Například: `EXTERNAL_AUTH=ldap saml`

Na rozdíl od Overleaf CEP v naší edici ayaka-notes omezujeme autentizaci LDAP pouze na čistou autentizační metodu, která je dostupná na `http://your-overleaf.com/ldap/login`.

Při použití metod autentizace LDAP uživatel zadá `uživatelské jméno` a `heslo` v přihlašovacím formuláři se provede pokus:

1. V adresáři LDAP se vyhledá uživatel LDAP pomocí filtru definovaného `OVERLEAF_LDAP_SEARCH_FILTER` a ověří se jeho identita.
2. Pokud je autentizace úspěšná, v databázi uživatelů Overleaf se vyhledá uživatel s primární e-mailovou adresou, která odpovídá e-mailové adrese ověřeného uživatele LDAP:
   * Pokud je nalezen odpovídající uživatel, `hashedPassword` pole pro tohoto uživatele se smaže (pokud existuje). Tím je zajištěno, že se uživatel může v budoucnu přihlašovat pouze prostřednictvím autentizace LDAP.
   * Pokud není nalezen odpovídající uživatel, vytvoří se nový uživatel Overleaf pomocí e-mailu, křestního jména a příjmení získaných ze serveru LDAP.

{% hint style="danger" %}
U uživatelů, kteří se přihlašují přes LDAP, neukládáme (ani neodstraňujeme existující) hashovaná hesla v mongo databázi Overleaf.
{% endhint %}

#### Proměnné prostředí

* `OVERLEAF_LDAP_URL` **(povinné)**
  * URL serveru LDAP.
    * Příklad: `ldaps://ldap.example.com:636` (LDAP přes SSL)
    * Příklad: `ldap://ldap.example.com:389` (nešifrované nebo STARTTLS, pokud je nakonfigurováno).
* `OVERLEAF_LDAP_IDENTITY_SERVICE_NAME`
  * Zobrazovaný název služby identity LDAP, používaný na přihlašovací stránce.
  * Výchozí hodnota je `Přihlásit se pomocí poskytovatele LDAP`.
* `OVERLEAF_LDAP_EMAIL_ATT`
  * Atribut e-mailu vrácený serverem LDAP, výchozí `mail`. Každý uživatel LDAP musí mít alespoň jednu e-mailovou adresu. Pokud je uvedeno více adres, použije se pouze první.
* `OVERLEAF_LDAP_FIRST_NAME_ATT`
  * Název vlastnosti obsahující křestní jméno uživatele, které se používá v aplikaci, obvykle `givenName`.
* `OVERLEAF_LDAP_LAST_NAME_ATT`
  * Název vlastnosti obsahující příjmení uživatele, které se používá v aplikaci, obvykle `sn`.
* `OVERLEAF_LDAP_NAME_ATT`
  * Název vlastnosti obsahující celé jméno uživatele, obvykle `cn`. Pokud není definována některá z předchozích dvou proměnných, křestní a/nebo příjmení uživatele se získá z této proměnné. Jinak se nepoužije.
* `OVERLEAF_LDAP_PLACEHOLDER`
  * Zástupný text pro přihlašovací formulář, výchozí hodnota je `Uživatelské jméno`.
* `OVERLEAF_LDAP_UPDATE_USER_DETAILS_ON_LOGIN`
  * Pokud je nastaveno na `true`, aktualizuje uživatele LDAP `first_name` a `last_name` pole při přihlášení a vypne formulář s podrobnostmi uživatele na `/user/settings` pro uživatele LDAP. Jinak se podrobnosti načtou pouze při prvním přihlášení.
* `OVERLEAF_LDAP_BIND_DN`
  * Rozlišující název uživatele LDAP, který má být použit pro připojení LDAP (tento uživatel by měl být schopen vyhledávat/vypisovat účty na serveru LDAP), např., `cn=ldap_reader,dc=example,dc=com`. Pokud není definováno, použije se anonymní navázání.
* `OVERLEAF_LDAP_BIND_CREDENTIALS`
  * Heslo pro `OVERLEAF_LDAP_BIND_DN`.
* `OVERLEAF_LDAP_BIND_PROPERTY`
  * Vlastnost uživatele, vůči které se klient připojuje, výchozí hodnota je `dn`.
* `OVERLEAF_LDAP_SEARCH_BASE` **(povinné)**
  * Základní DN, ze kterého se mají vyhledávat uživatelé. Např., `ou=people,dc=example,dc=com`.
* `OVERLEAF_LDAP_SEARCH_FILTER`
  * Vyhledávací filtr LDAP, pomocí kterého se najde uživatel. Použijte doslovný řetězec '{{username}}', aby se zadané uživatelské jméno dosadilo do vyhledávání LDAP.
    * Příklad: `(|(uid={{username}})(mail={{username}}))` (uživatel se může přihlásit e-mailem nebo přihlašovacím jménem).
    * Příklad: `(sAMAccountName={{username}})` (Active Directory).
* `OVERLEAF_LDAP_SEARCH_SCOPE`
  * Rozsah vyhledávání může být `base`, `one`, nebo `sub` (výchozí).
* `OVERLEAF_LDAP_SEARCH_ATTRIBUTES`
  * Pole JSON atributů, které se mají načíst ze serveru LDAP, např., `["uid", "mail", "givenName", "sn"]`. Ve výchozím nastavení se načítají všechny atributy.
* `OVERLEAF_LDAP_STARTTLS`
  * Pokud `true`, používá se LDAP přes TLS.
* `OVERLEAF_LDAP_TLS_OPTS_CA_PATH`
  * Cesta k souboru obsahujícímu certifikát CA používaný k ověření certifikátu SSL/TLS serveru LDAP. Pokud je certifikátů více, může to být pole JSON s cestami k certifikátům. Soubory musí být přístupné pro kontejner Docker.
    * Příklad (jeden certifikát): `/var/lib/overleaf/certs/ldap_ca_cert.pem`
    * Příklad (více certifikátů): `["/var/lib/overleaf/certs/ldap_ca_cert1.pem", "/var/lib/overleaf/certs/ldap_ca_cert2.pem"]`
* `OVERLEAF_LDAP_TLS_OPTS_REJECT_UNAUTH`
  * Pokud `true`, certifikát serveru se ověří proti seznamu poskytnutých certifikačních autorit CA.
* `OVERLEAF_LDAP_CACHE`
  * Pokud `true`, pak se bude do mezipaměti na 5 minut ukládat až 100 přihlašovacích údajů najednou.
* `OVERLEAF_LDAP_TIMEOUT`
  * Jak dlouho má klient nechat operace běžet před vypršením časového limitu, ms (výchozí: nekonečno).
* `OVERLEAF_LDAP_CONNECT_TIMEOUT`
  * Jak dlouho má klient čekat, než vyprší časový limit pro připojení TCP, ms (výchozí: podle OS).
* `OVERLEAF_LDAP_IS_ADMIN_ATT` a `OVERLEAF_LDAP_IS_ADMIN_ATT_VALUE`
  * Když jsou nastaveny obě proměnné prostředí, proces přihlášení aktualizuje `user.isAdmin = true` pokud profil LDAP obsahuje atribut určený `OVERLEAF_LDAP_IS_ADMIN_ATT` a jeho hodnota buď odpovídá `OVERLEAF_LDAP_IS_ADMIN_ATT_VALUE` nebo je pole obsahující `OVERLEAF_LDAP_IS_ADMIN_ATT_VALUE`, jinak `user.isAdmin` se nastaví na `false`. Pokud není nastavena některá z těchto proměnných, pak se stav administrátora nastaví pouze na `true` při vytváření administrátorského uživatele v Launchpadu.

Následujících pět proměnných se používá ke konfiguraci toho, jak se uživatelské kontakty načítají ze serveru LDAP.

* `OVERLEAF_LDAP_CONTACTS_FILTER`
  * Filtr používaný k vyhledávání uživatelů na serveru LDAP, kteří se mají načíst do kontaktů. Zástupný znak '{{userProperty}}' ve filtru se nahradí hodnotou vlastnosti určené `OVERLEAF_LDAP_CONTACTS_PROPERTY` uživatelem LDAP, který vyhledávání iniciuje. Pokud není definováno, ze serveru LDAP se do kontaktů nenačítají žádní uživatelé.
* `OVERLEAF_LDAP_CONTACTS_SEARCH_BASE`
  * Určuje základní DN, od kterého se má zahájit hledání kontaktů. Výchozí hodnota je `OVERLEAF_LDAP_SEARCH_BASE`.
* `OVERLEAF_LDAP_CONTACTS_SEARCH_SCOPE`
  * Rozsah vyhledávání může být `base`, `one`, nebo `sub` (výchozí).
* `OVERLEAF_LDAP_CONTACTS_PROPERTY`
  * Určuje vlastnost objektu uživatele, která nahradí zástupný znak '{{userProperty}}' v `OVERLEAF_LDAP_CONTACTS_FILTER`.
* `OVERLEAF_LDAP_CONTACTS_NON_LDAP_VALUE`
  * Určuje hodnotu `OVERLEAF_LDAP_CONTACTS_PROPERTY` pokud vyhledávání iniciuje uživatel mimo LDAP. Pokud tato proměnná není definována, výsledný filtr nebude odpovídat ničemu. Hodnota `*` může být použita jako zástupný znak.

<details>

<summary><strong>Příklad</strong></summary>

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

Výše uvedený příklad vede k načtení do kontaktů aktuálního uživatele LDAP všech uživatelů LDAP, kteří mají stejné UNIX `gid`. Uživatelé mimo LDAP budou mít ve svých kontaktech všechny uživatele LDAP s UNIX `gid=1000` ve svých kontaktech.

</details>

<details>

<summary><strong>Ukázkový soubor variables.env</strong></summary>

```
OVERLEAF_APP_NAME="Naše instance Overleaf"

ENABLED_LINKED_FILE_TYPES=project_file,project_output_file,url

# Povolit generování náhledů pomocí ImageMagick
ENABLE_CONVERSIONS=true

# Zakáže požadavek na potvrzení e-mailu
EMAIL_CONFIRMATION_DISABLED=true

## Nginx
# NGINX_WORKER_PROCESSES=4
# NGINX_WORKER_CONNECTIONS=768

## Nastavení pro TLS přes nginx-proxy
# OVERLEAF_BEHIND_PROXY=true
# OVERLEAF_SECURE_COOKIE=true

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

OVERLEAF_LEFT_FOOTER=[{"text": "Kontaktujte svůj tým podpory", "url": "mailto:support@example.com"}]
OVERLEAF_RIGHT_FOOTER=[{"text":"Ahoj, jsem vpravo", "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=Tento systém provozuje oddělení x

OVERLEAF_PROXY_LEARN=true
NAV_HIDE_POWERED_BY=true

#################
## LDAP pro 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='Uživatelské jméno nebo e-mailová adresa'

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/on-premises-cs/konfigurace/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.
