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

# SAML 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.

### Konfigurace

Interně modul Overleaf SAML používá [passport-saml](https://github.com/node-saml/passport-saml) knihovnu; většina následujících konfiguračních možností se předává do `passport-saml`. Pokud máte potíže s konfigurací SAML, stojí za to si přečíst README pro `passport-saml` abyste získali představu o očekávané konfiguraci.

Proměnná prostředí `EXTERNAL_AUTH` je vyžadováno pro povolení modulu ověřování SAML. Tato proměnná prostředí určuje, které externí metody ověřování jsou aktivovány. Hodnota této proměnné je seznam. Pokud seznam obsahuje `saml` pak bude ověřování SAML aktivováno.

Například: `EXTERNAL_AUTH=ldap saml`

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

```json
samlIdentifiers: [
  {
    externalUserId: "...",
    providerId: "1",
    userIdAttribute: "..."
  }
]
```

Pole `externalUserId` musí odpovídat hodnotě vlastnosti určené pomocí `userIdAttribute` v profilu uživatele vráceném serverem IdP.

Pokud není nalezen odpovídající záznam, databáze se prohledá po uživateli, jehož primární e-mailová adresa odpovídá e-mailu v profilu uživatele IdP:

* Pokud je takový uživatel nalezen, `hashedPassword` pole se odstraní, aby se zakázalo místní ověřování, a `samlIdentifiers` pole se přidá.
* Pokud není nalezen žádný odpovídající uživatel, vytvoří se nový uživatel s e-mailovou adresou a `samlIdentifiers` z profilu IdP.

**Poznámka:** V současnosti je podporován pouze jeden SAML IdP. Pole `providerId` v `samlIdentifiers` je pevně nastaveno na `'1'`.

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

* `OVERLEAF_SAML_IDENTITY_SERVICE_NAME`
  * Zobrazované jméno identity služby, používané na přihlašovací stránce (výchozí: `Přihlásit se pomocí SAML IdP`).
* `OVERLEAF_SAML_USER_ID_FIELD`
  * Hodnota tohoto atributu bude aplikací Overleaf použita jako externí ID uživatele, výchozí je `nameID`.
* `OVERLEAF_SAML_EMAIL_FIELD`
  * Název pole Email v profilu uživatele, výchozí hodnota je `nameID`.
* `OVERLEAF_SAML_FIRST_NAME_FIELD`
  * Název pole firstName v profilu uživatele, výchozí hodnota je `givenName`.
* `OVERLEAF_SAML_LAST_NAME_FIELD`
  * Název pole lastName v profilu uživatele, výchozí hodnota je `lastName`
* `OVERLEAF_SAML_UPDATE_USER_DETAILS_ON_LOGIN`
  * Je-li nastaveno na `true`, aktualizuje uživatele `first_name` a `last_name` pole při přihlášení a vypnout formulář údajů o uživateli na `/user/settings` stránku.
* `OVERLEAF_SAML_ENTRYPOINT` **(povinné)**
  * Vstupní URL služby identity SAML.
    * Příklad: `https://idp.example.com/simplesaml/saml2/idp/SSOService.php`
    * Příklad pro Azure: `https://login.microsoftonline.com/8b26b46a-6dd3-45c7-a104-f883f4db1f6b/saml2`
* `OVERLEAF_SAML_ISSUER` **(povinné)**
  * Název vydavatele.
* `OVERLEAF_SAML_AUDIENCE`
  * Očekávané Audience odpovědi SAML, výchozí hodnota je `OVERLEAF_SAML_ISSUER`.
* `OVERLEAF_SAML_IDP_CERT` **(povinné)**
  * Cesta k souboru obsahujícímu veřejný certifikát poskytovatele identity, používaný k ověření podpisů příchozích odpovědí SAML. Pokud má poskytovatel identity více platných podpisových certifikátů, může to být pole JSON s cestami k certifikátům.
    * Příklad (jeden certifikát): `/var/lib/overleaf/certs/idp_cert.pem`
    * Příklad (více certifikátů): `["var/lib/overleaf/certs/idp_cert.pem", "/var/lib/overleaf/certs/idp_cert_old.pem"]`
* `OVERLEAF_SAML_PUBLIC_CERT`
  * Cesta k souboru obsahujícímu veřejný podpisový certifikát, který se vloží do požadavků na ověření, aby IdP mohl ověřit podpisy příchozího požadavku SAML. Je to vyžadováno při nastavování [koncový bod metadat](https://github.com/yu-i-i/overleaf-cep/wiki/Extended-CE:-SAML-Authentication#metadata-for-the-identity-provider) když je strategie nakonfigurována pomocí `OVERLEAF_SAML_PRIVATE_KEY`. Pro podporu rotace certifikátů lze poskytnout pole JSON s cestami k certifikátům. Při zadání pole certifikátů by první položka v poli měla odpovídat aktuálnímu `OVERLEAF_SAML_PRIVATE_KEY`. Další položky v poli lze použít k publikování nadcházejících certifikátů IdP před změnou `OVERLEAF_SAML_PRIVATE_KEY`.
* `OVERLEAF_SAML_PRIVATE_KEY`
  * Cesta k souboru obsahujícímu soukromý klíč ve formátu PEM odpovídající `OVERLEAF_SAML_PUBLIC_CERT` který se používá k podpisu ověřovacích požadavků odesílaných passport-saml.
* `OVERLEAF_SAML_DECRYPTION_CERT`
  * Cesta k souboru obsahujícímu veřejný certifikát, používaný pro [koncový bod metadat](https://github.com/yu-i-i/overleaf-cep/wiki/Extended-CE:-SAML-Authentication#metadata-for-the-identity-provider).
* `OVERLEAF_SAML_DECRYPTION_PVK`
  * Cesta k souboru obsahujícímu soukromý klíč odpovídající `OVERLEAF_SAML_DECRYPTION_CERT` který bude použit k pokusu o dešifrování všech obdržených šifrovaných tvrzení.
* `OVERLEAF_SAML_SIGNATURE_ALGORITHM`
  * Volitelně nastavte podpisový algoritmus pro podepisování požadavků, platné hodnoty jsou 'sha1' (výchozí), 'sha256' (doporučeno), 'sha512' (nejbezpečnější, zkontrolujte, zda jej váš IdP podporuje).
* `OVERLEAF_SAML_ADDITIONAL_PARAMS`
  * Slovník JSON s dalšími parametry dotazu, které se přidají ke všem požadavkům.
* `OVERLEAF_SAML_ADDITIONAL_AUTHORIZE_PARAMS`
  * Slovník JSON s dalšími parametry dotazu, které se přidají k požadavkům 'authorize'.
    * Příklad: `{"some_key": "some_value"}`
* `OVERLEAF_SAML_IDENTIFIER_FORMAT`
  * Formát identifikátoru jména, který se má požadovat od poskytovatele identity (výchozí: `urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress`). Pokud používáte `urn:oasis:names:tc:SAML:2.0:nameid-format:persistent`, ujistěte se, že `OVERLEAF_SAML_EMAIL_FIELD` proměnná prostředí je definována. Pokud `urn:oasis:names:tc:SAML:2.0:nameid-format:transient` je vyžadován, musíte také definovat `OVERLEAF_SAML_ID_FIELD` proměnnou prostředí, kterou lze například nastavit na e-mailovou adresu uživatele.
* `OVERLEAF_SAML_ACCEPTED_CLOCK_SKEW_MS`
  * Časový posun v milisekundách, který je přijatelný mezi klientem a serverem při kontrole časových razítek platnosti podmínek tvrzení OnBefore a NotOnOrAfter. Nastavení na -1 zcela vypne kontrolu těchto podmínek. Výchozí hodnota je 0.
* `OVERLEAF_SAML_ATTRIBUTE_CONSUMING_SERVICE_INDEX`
  * `AttributeConsumingServiceIndex` atribut, který se přidá k AuthnRequest, aby IdP určil, jakou sadu atributů připojit k odpovědi ([odkaz](http://blog.aniljohn.com/2014/01/data-minimization-front-channel-saml-attribute-requests.html)).
* `OVERLEAF_SAML_AUTHN_CONTEXT`
  * Pole JSON s hodnotami formátu identifikátoru jména, které se mají použít k vyžádání kontextu autentizace. Výchozí: `["urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport"]`.
* `OVERLEAF_SAML_FORCE_AUTHN`
  * Pokud `true`, počáteční požadavek SAML od poskytovatele služby určuje, že IdP má vynutit opětovné ověření uživatele, i když má platnou relaci.
* `OVERLEAF_SAML_DISABLE_REQUESTED_AUTHN_CONTEXT`
  * Pokud `true`, nevyžadujte konkrétní kontext autentizace. Například to můžete nastavit na `true` pro povolení dalších kontextů, jako jsou přihlášení bez hesla (`urn:oasis:names:tc:SAML:2.0:ac:classes:X509`). Podpora dalších kontextů závisí na vašem IdP.
* `OVERLEAF_SAML_AUTHN_REQUEST_BINDING`
  * Je-li nastaveno na `HTTP-POST`, požádá o ověření od IdP prostřednictvím vazby HTTP POST, jinak je výchozí HTTP-Redirect.
* `OVERLEAF_SAML_VALIDATE_IN_RESPONSE_TO`
  * Pokud `always`, pak bude InResponseTo ověřováno z příchozích odpovědí SAML.
  * Pokud `nikdy`, pak se InResponseTo nebude ověřovat (výchozí).
  * Pokud `ifPresent`, pak bude InResponseTo ověřováno pouze tehdy, pokud je přítomno v příchozí odpovědi SAML.
* `OVERLEAF_SAML_WANT_ASSERTIONS_SIGNED` a `OVERLEAF_SAML_WANT_AUTHN_RESPONSE_SIGNED`
  * Je-li nastaveno na `true` (výchozí), Overleaf očekává, že tvrzení SAML, respektive celá autentizační odpověď SAML, budou podepsány IdP. Když jsou obě možnosti `false`, musí být podepsáno alespoň jedno z tvrzení nebo odpověď.
* `OVERLEAF_SAML_REQUEST_ID_EXPIRATION_PERIOD_MS`
  * Definuje dobu vypršení platnosti, kdy Request ID vygenerované pro požadavek SAML nebude platné, pokud se objeví v odpovědi SAML v poli `InResponseTo` . Výchozí hodnota: 28800000 (8 hodin).
* `OVERLEAF_SAML_LOGOUT_URL`
  * základní adresa, na kterou se mají odesílat požadavky na odhlášení (výchozí: `entryPoint`).
    * Příklad: `https://idp.example.com/simplesaml/saml2/idp/SingleLogoutService.php`
* `OVERLEAF_SAML_ADDITIONAL_LOGOUT_PARAMS`
  * Slovník JSON s dalšími parametry dotazu, které se přidají k požadavkům 'logout'.
* `OVERLEAF_SAML_IS_ADMIN_FIELD` a `OVERLEAF_SAML_IS_ADMIN_FIELD_VALUE`
  * Když jsou nastaveny obě proměnné prostředí, proces přihlášení aktualizuje `user.isAdmin = true` pokud profil vrácený SAML IdP obsahuje atribut určený pomocí `OVERLEAF_SAML_IS_ADMIN_FIELD` a jeho hodnota buď odpovídá `OVERLEAF_SAML_IS_ADMIN_FIELD_VALUE` nebo je pole obsahující `OVERLEAF_SAML_IS_ADMIN_FIELD_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.

**Metadata poskytovatele identity**

Aktuální verze Overleaf CE obsahuje koncový bod pro získání metadat poskytovatele služby: `http://my-overleaf-instance.com/saml/meta`

Poskytovatel identity bude muset být nakonfigurován tak, aby rozpoznal server Overleaf jako "Service Provider". Pokyny, jak to udělat, naleznete v dokumentaci vašeho serveru SAML.

Níže je příklad vhodných metadat poskytovatele služby:

<details>

<summary><strong>ol-meta.xml</strong></summary>

```
<?xml version="1.0"?>
<EntityDescriptor xmlns="urn:oasis:names:tc:SAML:2.0:metadata"
                  xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
                  entityID="MyOverleaf"
                  ID="_b508c83b7dda452f5b269383fb391107116f8f57">
  <SPSSODescriptor protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol" AuthnRequestsSigned="true" WantAssertionsSigned="true">
    <KeyDescriptor use="signing">
      <ds:KeyInfo>
        <ds:X509Data>
          <ds:X509Certificate>MII...
[skipped]
</ds:X509Certificate>
        </ds:X509Data>
      </ds:KeyInfo>
    </KeyDescriptor>
    <KeyDescriptor use="encryption">
      <ds:KeyInfo>
        <ds:X509Data>
          <ds:X509Certificate>MII...
[skipped]
</ds:X509Certificate>
        </ds:X509Data>
      </ds:KeyInfo>
      <EncryptionMethod Algorithm="http://www.w3.org/2009/xmlenc11#aes256-gcm"/>
      <EncryptionMethod Algorithm="http://www.w3.org/2009/xmlenc11#aes128-gcm"/>
      <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#aes256-cbc"/>
      <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#aes128-cbc"/>
    </KeyDescriptor>
    <SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"
                         Location="https://my-overleaf-instance.com/saml/logout/callback"/>
    <NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress</NameIDFormat>
    <AssertionConsumerService index="1"
                              isDefault="true"
                              Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"
                              Location="https://my-overleaf-instance.com/saml/login/callback"/>
  </SPSSODescriptor>
</EntityDescriptor>

```

</details>

Všimněte si certifikátů, `AssertionConsumerService.Location`, `SingleLogoutService.Location` a `EntityDescriptor.entityID` a nastavte je podle potřeby v konfiguraci vašeho IdP, nebo zašlete soubor metadat správci IdP.

<details>

<summary><strong>Ukázkový soubor variables.env (minimální)</strong></summary>

<pre><code>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

#################
##     SAML    ##
#################

EXTERNAL_AUTH=saml
OVERLEAF_SAML_ISSUER=MyOverleaf
OVERLEAF_SAML_IDENTITY_SERVICE_NAME='Přihlásit se pomocí poskytovatele SAML'
OVERLEAF_SAML_EMAIL_FIELD=Email
OVERLEAF_SAML_FIRST_NAME_FIELD=DisplayName
OVERLEAF_SAML_LAST_NAME_FIELD=DisplayName
OVERLEAF_SAML_ENTRYPOINT=http://localhost:18000/login/saml/authorize/admin/SAML_Overleaf
<strong>OVERLEAF_SAML_IDP_CERT=/var/lib/overleaf/certs/idp_cert.pem
</strong>OVERLEAF_SAML_SIGNATURE_ALGORITHM=
</code></pre>

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