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

# LDAP autentizace

Tato funkce je vyvinuta [yu-i-i/overleaf-cep](https://github.com/yu-i-i/overleaf-cep). Zde nabízíme některé dokumenty pro vaši konfiguraci.

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

### Co je LDAP

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

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

### Konfigurace

Interně Overleaf LDAP používá [passport-ldapauth](https://github.com/vesse/passport-ldapauth) knihovnu. Většina 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 problémy s konfigurací LDAP, vyplatí se přečíst README pro `passport-ldapauth` abyste získali představu o očekávané konfiguraci.

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

Například: `EXTERNAL_AUTH=ldap saml`

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

Při použití metody autentizace LDAP uživatel zadá `uživatelské jméno` a `heslo` ve formuláři pro přihlášení a provede se pokus o:

1. Uživatel LDAP je vyhledán v adresáři LDAP pomocí filtru definovaného `OVERLEAF_LDAP_SEARCH_FILTER` a ověřen.
2. Pokud je ověření úspěšné, v databázi uživatelů Overleaf se zkontroluje uživatel s primární e-mailovou adresou odpovídající e-mailové adrese ověřeného uživatele LDAP:
   * Pokud je nalezen odpovídající uživatel, `hashedPassword` pole pro tohoto uživatele se odstraní (pokud existuje). Tím je zajištěno, že se uživatel bude moci v budoucnu přihlašovat pouze prostřednictvím autentizace LDAP.
   * Pokud není nalezen žádný odpovídající uživatel, vytvoří se nový uživatel Overleaf s použitím 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 databázi Mongo 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 `Přihlásit se pomocí poskytovatele LDAP`.
* `OVERLEAF_LDAP_EMAIL_ATT`
  * E-mailový atribut vrácený serverem LDAP, výchozí hodnota `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 `Uživatelské jméno`.
* `OVERLEAF_LDAP_UPDATE_USER_DETAILS_ON_LOGIN`
  * Je-li nastaveno na `true`, aktualizuje LDAP uživatele `first_name` a `last_name` pole při přihlášení a vypne formulář s údaji o uživateli na stránce `/user/settings` pro uživatele LDAP. Jinak budou údaje načteny 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 naváže, výchozí hodnota `dn`.
* `OVERLEAF_LDAP_SEARCH_BASE` **(povinné)**
  * Základní DN, od kterého se mají uživatelé vyhledávat. Např. `ou=people,dc=example,dc=com`.
* `OVERLEAF_LDAP_SEARCH_FILTER`
  * Filtr pro vyhledávání LDAP, pomocí kterého se najde uživatel. Použijte doslovný řetězec '{{username}}', aby se zadané uživatelské jméno vložilo 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`
  * JSON pole 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žitý k ověření SSL/TLS certifikátu serveru LDAP. Pokud je certifikátů více, může se jednat o JSON pole cest k certifikátům. Soubory musí být přístupné kontejneru 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 je ověřován proti seznamu poskytnutých CA.
* `OVERLEAF_LDAP_CACHE`
  * Pokud `true`, pak bude až 100 přihlašovacích údajů najednou uloženo v mezipaměti po dobu 5 minut.
* `OVERLEAF_LDAP_TIMEOUT`
  * Jak dlouho má klient nechat operace běžet před vypršením času, ms (Výchozí: Nekonečno).
* `OVERLEAF_LDAP_CONNECT_TIMEOUT`
  * Jak dlouho má klient čekat před vypršením času u TCP připojení, ms (Výchozí: výchozí nastavení 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` je nastaveno na `false`. Pokud není nastavena žádná z těchto proměnných, pak se stav správce nastaví pouze na `true` během 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 z serveru LDAP načítají kontakty uživatele.

* `OVERLEAF_LDAP_CONTACTS_FILTER`
  * Filtr použitý k vyhledávání uživatelů na serveru LDAP, kteří mají být načteni do kontaktů. Zástupný text '{{userProperty}}' ve filtru je nahrazen hodnotou vlastnosti určené `OVERLEAF_LDAP_CONTACTS_PROPERTY` od uživatele 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á začít hledat kontakty. Výchozí hodnota `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ý text '{{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, který není 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é bez LDAP budou mít ve svých kontaktech všechny uživatele LDAP s UNIX `gid=1000` .

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

# Umožňuje generování miniatur pomocí ImageMagick
ENABLE_CONVERSIONS=true

# Zakažuje 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 Overleafu
# 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 na pravé straně", "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://overleaf-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.
