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

# Ověřování OIDC

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.

### Konfigurace

Interně modul OIDC v Overleafu používá [passport-openidconnect](https://github.com/jaredhanson/passport-openidconnect) knihovnu. Pokud máte potíže s konfigurací OpenID Connect, stojí za to přečíst si README pro `passport-openidconnect` abyste získali představu o konfiguraci, kterou očekává.

Proměnná prostředí `EXTERNAL_AUTH` je vyžadováno k povolení modulu OIDC autentizace. Tato proměnná prostředí určuje, které externí metody ověřování jsou aktivní. Hodnota této proměnné je seznam. Pokud seznam obsahuje `oidc` pak se ověřování OIDC aktivuje.

Například: `EXTERNAL_AUTH=ldap oidc`

Při použití metody ověřování OIDC je uživatel přesměrován na autentizační stránku poskytovatele identity (IdP). Pokud IdP uživatele úspěšně ověří, v databázi uživatelů Overleaf se vyhledá záznam obsahující `thirdPartyIdentifiers` pole ve struktuře:

```
thirdPartyIdentifiers: [
  {
    externalUserId: "...",
    externalData: null,
    providerId: "..."
  }
]
```

Pole `externalUserId` musí odpovídat ID uživatele v profilu vráceném serverem IdP (viz `OVERLEAF_OIDC_USER_ID_FIELD` proměnná prostředí), a `providerId` musí odpovídat ID poskytovatele OIDC (viz `OVERLEAF_OIDC_PROVIDER_ID`).

Pokud se nenajde žádný odpovídající záznam, v databázi se vyhledá uživatel, jehož primární e-mailová adresa odpovídá e-mailu v profilu uživatele IdP:

* Pokud je takový uživatel nalezen, `thirdPartyIdentifiers` pole se aktualizuje.
* Pokud se nenajde žádný odpovídající uživatel a vytváření účtu JIT není zakázáno, vytvoří se nový uživatel s e-mailovou adresou a `thirdPartyIdentifiers` z profilu IdP.

V obou případech se říká, že je uživatel „propojen“ s externím uživatelem OIDC. Uživatel může být od poskytovatele OIDC odpojen na `/user/settings` .

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

Hodnoty následujících pěti povinných proměnných lze najít pomocí `.well-known/openid-configuration` koncového bodu vašeho poskytovatele OpenID (OP).

* `OVERLEAF_OIDC_ISSUER` **(povinné)**
* `OVERLEAF_OIDC_AUTHORIZATION_URL` **(povinné)**
* `OVERLEAF_OIDC_TOKEN_URL` **(povinné)**
* `OVERLEAF_OIDC_USER_INFO_URL` **(povinné)**
* `OVERLEAF_OIDC_LOGOUT_URL` **(povinné)**

Hodnoty následujících dvou povinných proměnných vám poskytne administrátor vašeho OP

* `OVERLEAF_OIDC_CLIENT_ID` **(povinné)**
* `OVERLEAF_OIDC_CLIENT_SECRET` **(povinné)**
* `OVERLEAF_OIDC_SCOPE`
  * Výchozí: `openid profile email`
* `OVERLEAF_OIDC_PROVIDER_ID`
  * Libovolné ID OP, výchozí hodnota je `oidc`.
* `OVERLEAF_OIDC_PROVIDER_NAME`
  * Název OP, používaný v `Propojené účty` sekce v `/user/settings` stránce, výchozí hodnota je `OIDC Provider`.
* `OVERLEAF_OIDC_IDENTITY_SERVICE_NAME`
  * Zobrazované jméno pro službu identity, používané na přihlašovací stránce (výchozí: `Přihlásit se pomocí $OVERLEAF_OIDC_PROVIDER_NAME`).
* `OVERLEAF_OIDC_PROVIDER_DESCRIPTION`
  * Popis OP, používaný v `Propojené účty` sekci (výchozí: `Přihlásit se pomocí $OVERLEAF_OIDC_PROVIDER_NAME`).
* `OVERLEAF_OIDC_PROVIDER_INFO_LINK`
  * `Zjistit více` URL v popisu OP, výchozí: žádný `Zjistit více` odkaz v popisu.
* `OVERLEAF_OIDC_PROVIDER_HIDE_NOT_LINKED`
  * Nezobrazovat OP na `/user/settings` stránce, pokud účet uživatele není s OP propojen, výchozí `false`.
* `OVERLEAF_OIDC_USER_ID_FIELD`
  * Hodnota tohoto atributu bude Overleafem použita jako externí ID uživatele, výchozí hodnota je `id`. Další možné rozumné hodnoty jsou `email` a `uživatelské jméno` (odpovídající `preferred_username` nároku OIDC).
* `OVERLEAF_OIDC_ALLOWED_EMAIL_DOMAINS`
  * Omezuje průběžné (Just-in-Time, JIT) vytváření účtů pro uživatele ověřované přes OIDC. Pokud je nastavena na seznam názvů domén oddělených čárkami, nový účet bude vytvořen pouze tehdy, pokud se doména e-mailové adresy uživatele shoduje s některou z uvedených domén. Pokud se doména neshoduje, musí správce ručně vytvořit uživatelský účet pomocí e-mailové adresy uživatele OIDC, a to buď se silným náhodným heslem, nebo nejlépe bez `hashedPassword` pole vůbec. Názvy domén mohou obsahovat na začátku `*.` zástupný znak pro shodu s subdoménami.
    * Příklad: Chcete-li povolit vytváření účtů JIT pro uživatele s e-mailovou adresou jako `name@example.com` a `name@math.example.com`:\
      `OVERLEAF_OIDC_ALLOWED_EMAIL_DOMAINS=example.com, *.example.com`
    * Příklad: Chcete-li zcela zakázat vytváření účtů JIT:\
      `OVERLEAF_OIDC_ALLOWED_EMAIL_DOMAINS=`
* `OVERLEAF_OIDC_UPDATE_USER_DETAILS_ON_LOGIN`
  * Pokud je nastaveno na `true`, aktualizuje uživatelské `first_name` a `last_name` pole při přihlášení a deaktivuje formulář s údaji uživatele na `/user/settings` .
* `OVERLEAF_OIDC_IS_ADMIN_FIELD` a `OVERLEAF_OIDC_IS_ADMIN_FIELD_VALUE`
  * Když jsou nastaveny obě proměnné prostředí, proces přihlášení aktualizuje `user.isAdmin = true` pokud profil vrácený OP obsahuje atribut zadaný pomocí `OVERLEAF_OIDC_IS_ADMIN_FIELD` a jeho hodnota odpovídá `OVERLEAF_OIDC_IS_ADMIN_FIELD_VALUE`, jinak `user.isAdmin` se nastaví na `false`. Pokud `OVERLEAF_OIDC_IS_ADMIN_FIELD` je `email` pak se hodnota atributu `emails[0].value` použije pro kontrolu shody.

Přesměrovací URL vašeho poskytovatele OpenID je `https://my-overleaf-instance.com/oidc/login/callback`.

<details>

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

{% code title="variables.env" overflow="wrap" %}

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

#################
## OIDC pro CE ##
#################

EXTERNAL_AUTH=oidc

OVERLEAF_OIDC_PROVIDER_ID=oidc
OVERLEAF_OIDC_ISSUER=https://keycloak.provider.com/realms/example
OVERLEAF_OIDC_AUTHORIZATION_URL=https://keycloak.provider.com/realms/example/protocol/openid-connect/auth
OVERLEAF_OIDC_TOKEN_URL=https://keycloak.provider.com/realms/example/protocol/openid-connect/token
OVERLEAF_OIDC_USER_INFO_URL=https://keycloak.provider.com/realms/example/protocol/openid-connect/userinfo
OVERLEAF_OIDC_LOGOUT_URL=https://keycloak.provider.com/realms/example/protocol/openid-connect/logout
OVERLEAF_OIDC_CLIENT_ID=Overleaf-OIDC
OVERLEAF_OIDC_CLIENT_SECRET=DoNotUseThisATGgaAcTgCcATgGATTACAagGtTCaGcGTAG
OVERLEAF_OIDC_IDENTITY_SERVICE_NAME='Přihlásit se pomocí poskytovatele Keycloak OIDC'
OVERLEAF_OIDC_PROVIDER_NAME=Poskytovatel OIDC Keycloak
OVERLEAF_OIDC_PROVIDER_INFO_LINK=https://openid.net
OVERLEAF_OIDC_IS_ADMIN_FIELD=email
OVERLEAF_OIDC_IS_ADMIN_FIELD_VALUE=overleaf.admin@example.com
OVERLEAF_OIDC_UPDATE_USER_DETAILS_ON_LOGIN=false
```

{% endcode %}

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