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

# Ověřování SAML

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 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 problémy s konfigurací SAML, stojí za to si přečíst README pro `passport-saml` abyste získali představu o konfiguraci, kterou očekává.

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

Například: `EXTERNAL_AUTH=ldap saml`

Při použití metody autentizace SAML je uživatel přesměrován na autentizační web Identity Provideru (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 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, `hashedPassword` pole se odstraní, aby se zakázala místní autentizace, a `samlIdentifiers` pole se přidá.
* Pokud se nenajde žá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` pole v `samlIdentifiers` je nastaveno na `'1'`.

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

* `OVERLEAF_SAML_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í SAML IdP`).
* `OVERLEAF_SAML_USER_ID_FIELD`
  * Hodnota tohoto atributu bude Overleafem použita jako externí ID uživatele, výchozí hodnota 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`
  * Pokud je nastaveno na `true`, aktualizuje uživatelské `first_name` a `last_name` pole při přihlášení a vypněte formulář s údaji o uživateli na `/user/settings` .
* `OVERLEAF_SAML_ENTRYPOINT` **(povinné)**
  * Vstupní URL pro službu 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 Issueru.
* `OVERLEAF_SAML_AUDIENCE`
  * Očekávané Audience v odpovědi SAML, výchozí hodnota je hodnota `OVERLEAF_SAML_ISSUER`.
* `OVERLEAF_SAML_IDP_CERT` **(povinné)**
  * Cesta k souboru obsahujícímu veřejný certifikát poskytovatele identity, používanému 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 používaný k vložení do autentizačních požadavků, aby IdP mohl ověřit podpisy příchozího požadavku SAML. Je vyžadován při nastavování [koncového bodu metadat](https://github.com/yu-i-i/overleaf-cep/wiki/Extended-CE:-SAML-Authentication#metadata-for-the-identity-provider) když je strategie nakonfigurována s `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ů pro 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` používaný k podepisování autentizační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ého bodu 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 přijatých šifrovaných tvrzení.
* `OVERLEAF_SAML_SIGNATURE_ALGORITHM`
  * Volitelně nastavte algoritmus podpisu pro podepisování požadavků, platné hodnoty jsou 'sha1' (výchozí), 'sha256' (preferovaná), 'sha512' (nejbezpečnější, zkontrolujte, zda ji 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`). Při použití `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á odchylka v milisekundách, která je mezi klientem a serverem při kontrole časových razítek platnosti podmínky tvrzení OnBefore a NotOnOrAfter přijatelná. Nastavení na -1 úplně vypne kontrolu těchto podmínek. Výchozí hodnota je 0.
* `OVERLEAF_SAML_ATTRIBUTE_CONSUMING_SERVICE_INDEX`
  * `AttributeConsumingServiceIndex` atribut, který se přidá do AuthnRequest, aby IdP určil, sadu atributů má 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 pro požadová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`, nepožadujte konkrétní kontext autentizace. Například to můžete nastavit na `true` a povolit další kontexty, 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`
  * Pokud je nastaveno na `HTTP-POST`, bude vyžadovat autentizaci od IdP přes vazbu HTTP POST, jinak výchozí hodnota je HTTP-Redirect.
* `OVERLEAF_SAML_VALIDATE_IN_RESPONSE_TO`
  * Pokud `always`, pak se InResponseTo bude ověřovat v příchozích odpovědích SAML.
  * Pokud `nikdy`, pak se InResponseTo nebude ověřovat (výchozí).
  * Pokud `ifPresent`, pak se InResponseTo bude ověřovat pouze tehdy, je-li přítomno v příchozí odpovědi SAML.
* `OVERLEAF_SAML_WANT_ASSERTIONS_SIGNED` a `OVERLEAF_SAML_WANT_AUTHN_RESPONSE_SIGNED`
  * Pokud je 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`, alespoň jedno z tvrzení nebo odpověď musí být podepsáno.
* `OVERLEAF_SAML_REQUEST_ID_EXPIRATION_PERIOD_MS`
  * Určuje dobu vypršení, po jejímž uplynutí nebude Request ID vygenerované pro požadavek SAML 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 posílají 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ý IdP SAML 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` 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.

**Metadata pro 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 provést, najdete v dokumentaci k vašemu serveru SAML.

Níže je příklad odpovídající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...
[přeskočeno]
</ds:X509Certificate>
        </ds:X509Data>
      </ds:KeyInfo>
    </KeyDescriptor>
    <KeyDescriptor use="encryption">
      <ds:KeyInfo>
        <ds:X509Data>
          <ds:X509Certificate>MII...
[přeskočeno]
</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 odpovídajícím způsobem ve své konfiguraci IdP, nebo odešlete soubor metadat správci IdP.

<details>

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

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

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

EXTERNAL_AUTH=saml
OVERLEAF_SAML_ISSUER=MyOverleaf
OVERLEAF_SAML_IDENTITY_SERVICE_NAME='Přihlásit se pomocí SAML poskytovatele'
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://ayakaleaf-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.
