> 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/fi/konfiguraatio/overleaf-toolkit/authentication/saml-authentication.md).

# SAML-todennus

Tämän ominaisuuden on kehittänyt [yu-i-i/overleaf-cep](https://github.com/yu-i-i/overleaf-cep). Täältä löydät joitakin dokumentteja asetustasi varten.

### Asetukset

Sisäisesti Overleafin SAML-moduuli käyttää [passport-saml](https://github.com/node-saml/passport-saml) kirjastoa, ja suurin osa seuraavista määritysvaihtoehdoista välitetään `passport-saml`. Jos SAML:n määrittämisessä ilmenee ongelmia, kannattaa lukea README seuraavalle: `passport-saml` saadaksesi käsityksen siitä, millaista määritystä se odottaa.

Ympäristömuuttuja `EXTERNAL_AUTH` vaaditaan SAML-todennusmoduulin käyttöön ottamiseksi. Tämä ympäristömuuttuja määrittää, mitkä ulkoiset todennusmenetelmät aktivoidaan. Tämän muuttujan arvo on lista. Jos lista sisältää `saml` silloin SAML-todennus aktivoidaan.

Esimerkiksi: `EXTERNAL_AUTH=ldap saml`

SAML-todennusmenetelmää käytettäessä käyttäjä ohjataan Identity Providerin (IdP) todennussivustolle. Jos IdP todentaa käyttäjän onnistuneesti, Overleafin käyttäjätietokannasta etsitään tietue, joka sisältää `samlIdentifiers` kentän rakenne on seuraava:

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

Se `externalUserId` täytyy vastata ominaisuuden arvoa, joka on määritetty `userIdAttribute` IdP-palvelimen palauttamassa käyttäjäprofiilissa.

Jos vastaavaa tietuetta ei löydy, tietokannasta etsitään käyttäjää, jonka ensisijainen sähköpostiosoite vastaa IdP-käyttäjäprofiilin sähköpostiosoitetta:

* Jos tällainen käyttäjä löytyy, `hashedPassword` kenttä poistetaan paikallisen todennuksen poistamiseksi käytöstä, ja `samlIdentifiers` kenttä lisätään.
* Jos vastaavaa käyttäjää ei löydy, uusi käyttäjä luodaan sähköpostiosoitteella ja `samlIdentifiers` IdP-profiilista.

**Huom:** Tällä hetkellä tuetaan vain yhtä SAML IdP:tä.  `providerId` kenttä kohdassa `samlIdentifiers` on asetettu arvoon `'1'`.

#### Ympäristömuuttujat

* `OVERLEAF_SAML_IDENTITY_SERVICE_NAME`
  * Tunnistuspalvelun näyttönimi, jota käytetään kirjautumissivulla (oletus: `Kirjaudu sisään SAML IdP:llä`).
* `OVERLEAF_SAML_USER_ID_FIELD`
  * Tämän attribuutin arvoa käytetään Overleafissa ulkoisena käyttäjätunnuksena, oletus: `nameID`.
* `OVERLEAF_SAML_EMAIL_FIELD`
  * Sähköposti-kentän nimi käyttäjäprofiilissa, oletuksena `nameID`.
* `OVERLEAF_SAML_FIRST_NAME_FIELD`
  * firstName-kentän nimi käyttäjäprofiilissa, oletuksena `givenName`.
* `OVERLEAF_SAML_LAST_NAME_FIELD`
  * lastName-kentän nimi käyttäjäprofiilissa, oletuksena `lastName`
* `OVERLEAF_SAML_UPDATE_USER_DETAILS_ON_LOGIN`
  * Jos asetetaan arvoksi `true`, päivittää käyttäjän `first_name` ja `last_name` kenttä kirjautumisen yhteydessä, ja poista käyttäjätietolomake käytöstä kohdassa `/user/settings` sivulla.
* `OVERLEAF_SAML_ENTRYPOINT` **(pakollinen)**
  * SAML-identiteettipalvelun aloitusosoite.
    * Esimerkki: `https://idp.example.com/simplesaml/saml2/idp/SSOService.php`
    * Azure-esimerkki: `https://login.microsoftonline.com/8b26b46a-6dd3-45c7-a104-f883f4db1f6b/saml2`
* `OVERLEAF_SAML_ISSUER` **(pakollinen)**
  * Antajan nimi.
* `OVERLEAF_SAML_AUDIENCE`
  * Odotettu SAML-vastauksen Audience, oletuksena arvo `OVERLEAF_SAML_ISSUER`.
* `OVERLEAF_SAML_IDP_CERT` **(pakollinen)**
  * Polku tiedostoon, joka sisältää Identity Providerin julkisen varmenteen, jota käytetään saapuvien SAML-vastausten allekirjoitusten vahvistamiseen. Jos Identity Providerillä on useita kelvollisia allekirjoitusvarmenteita, se voi olla JSON-taulukko varmenteiden poluista.
    * Esimerkki (yksi varmenne): `/var/lib/overleaf/certs/idp_cert.pem`
    * Esimerkki (useita varmenteita): `["var/lib/overleaf/certs/idp_cert.pem", "/var/lib/overleaf/certs/idp_cert_old.pem"]`
* `OVERLEAF_SAML_PUBLIC_CERT`
  * Polku tiedostoon, joka sisältää julkisen allekirjoitusvarmenteen, jota käytetään upottamaan todennuspyyntöihin, jotta IdP voi validoida saapuvan SAML-pyynnön allekirjoitukset. Se vaaditaan, kun määritetään [metatietopäätepiste](https://github.com/yu-i-i/overleaf-cep/wiki/Extended-CE:-SAML-Authentication#metadata-for-the-identity-provider) kun strategia on määritetty käyttämään `OVERLEAF_SAML_PRIVATE_KEY`. Varmenteiden poluista koostuva JSON-taulukko voidaan antaa varmenteiden vaihtamisen tukemiseksi. Kun annetaan varmennepoluista koostuva taulukko, taulukon ensimmäisen merkinnän tulisi vastata nykyistä `OVERLEAF_SAML_PRIVATE_KEY`. Taulukon lisämerkintöjä voidaan käyttää tulevien varmenteiden julkaisemiseen IdP:ille ennen kuin vaihdetaan `OVERLEAF_SAML_PRIVATE_KEY`.
* `OVERLEAF_SAML_PRIVATE_KEY`
  * Polku tiedostoon, joka sisältää PEM-muotoillun yksityisen avaimen, joka vastaa `OVERLEAF_SAML_PUBLIC_CERT` jota käytetään passport-samlin lähettämien todennuspyyntöjen allekirjoittamiseen.
* `OVERLEAF_SAML_DECRYPTION_CERT`
  * Polku tiedostoon, joka sisältää julkisen varmenteen, jota käytetään [metatietopäätepiste](https://github.com/yu-i-i/overleaf-cep/wiki/Extended-CE:-SAML-Authentication#metadata-for-the-identity-provider).
* `OVERLEAF_SAML_DECRYPTION_PVK`
  * Polku tiedostoon, joka sisältää yksityisen avaimen, joka vastaa `OVERLEAF_SAML_DECRYPTION_CERT` jota käytetään yrittämään vastaanotettujen salattujen väittämien purkamista.
* `OVERLEAF_SAML_SIGNATURE_ALGORITHM`
  * Aseta valinnaisesti pyyntöjen allekirjoittamiseen käytettävä allekirjoitusalgoritmi; kelvolliset arvot ovat 'sha1' (oletus), 'sha256' (suositeltu), 'sha512' (turvallisin, tarkista tukeeko IdP sitä).
* `OVERLEAF_SAML_ADDITIONAL_PARAMS`
  * JSON-sanakirja lisäkyselyparametreista, jotka lisätään kaikkiin pyyntöihin.
* `OVERLEAF_SAML_ADDITIONAL_AUTHORIZE_PARAMS`
  * JSON-sanakirja lisäkyselyparametreista, jotka lisätään 'authorize'-pyyntöihin.
    * Esimerkki: `{"some_key": "some_value"}`
* `OVERLEAF_SAML_IDENTIFIER_FORMAT`
  * Nimi-tunnisteen muoto, jota pyydetään identiteetin tarjoajalta (oletus: `urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress`). Jos käytössä on `urn:oasis:names:tc:SAML:2.0:nameid-format:persistent`, varmista, että `OVERLEAF_SAML_EMAIL_FIELD` ympäristömuuttuja on määritetty. Jos `urn:oasis:names:tc:SAML:2.0:nameid-format:transient` vaaditaan, sinun on myös määritettävä `OVERLEAF_SAML_ID_FIELD` ympäristömuuttuja, joka voidaan esimerkiksi asettaa käyttäjän sähköpostiosoitteeksi.
* `OVERLEAF_SAML_ACCEPTED_CLOCK_SKEW_MS`
  * Aika millisekunteina, jonka verran asiakas ja palvelin voivat poiketa toisistaan tarkistettaessa OnBefore- ja NotOnOrAfter-väittämien ehtojen aikaleimojen kelvollisuutta. Asetus arvoon -1 poistaa näiden ehtojen tarkistamisen kokonaan käytöstä. Oletus on 0.
* `OVERLEAF_SAML_ATTRIBUTE_CONSUMING_SERVICE_INDEX`
  * `AttributeConsumingServiceIndex` Attribuutti, joka lisätään AuthnRequestiin ohjaamaan IdP:tä siitä, mikä attribuuttijoukko liitetään vastaukseen ([linkki](http://blog.aniljohn.com/2014/01/data-minimization-front-channel-saml-attribute-requests.html)).
* `OVERLEAF_SAML_AUTHN_CONTEXT`
  * JSON-taulukko nimi-tunnisteen muotojen arvoista, joilla pyydetään todennuskontekstia. Oletus: `["urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport"]`.
* `OVERLEAF_SAML_FORCE_AUTHN`
  * Jos `true`, palveluntarjoajan alkuperäinen SAML-pyyntö määrittää, että IdP:n tulisi pakottaa käyttäjän uudelleentodennus, vaikka hänellä olisi kelvollinen istunto.
* `OVERLEAF_SAML_DISABLE_REQUESTED_AUTHN_CONTEXT`
  * Jos `true`, älä pyydä tiettyä todennuskontekstia. Voit esimerkiksi asettaa tämän arvoon `true` salliaksesi lisäkontekstit, kuten salasanattomat kirjautumiset (`urn:oasis:names:tc:SAML:2.0:ac:classes:X509`). Lisäkontekstien tuki riippuu IdP:stäsi.
* `OVERLEAF_SAML_AUTHN_REQUEST_BINDING`
  * Jos asetetaan arvoksi `HTTP-POST`, pyytää todennusta IdP:ltä HTTP POST -sidonnan kautta, muuten oletus on HTTP-Redirect.
* `OVERLEAF_SAML_VALIDATE_IN_RESPONSE_TO`
  * Jos `always`, silloin InResponseTo validoidaan saapuvista SAML-vastauksista.
  * Jos `ei koskaan`, silloin InResponseTo:tä ei validoida (oletus).
  * Jos `ifPresent`, silloin InResponseTo validoidaan vain, jos se on läsnä saapuvassa SAML-vastauksessa.
* `OVERLEAF_SAML_WANT_ASSERTIONS_SIGNED` ja `OVERLEAF_SAML_WANT_AUTHN_RESPONSE_SIGNED`
  * Kun asetetaan arvoksi `true` (oletus), Overleaf odottaa, että SAML-väittämät ja vastaavasti koko SAML-todennusvastaus on IdP:n allekirjoittama. Kun molemmat vaihtoehdot ovat `false`, vähintään joko väittämien tai vastauksen on oltava allekirjoitettu.
* `OVERLEAF_SAML_REQUEST_ID_EXPIRATION_PERIOD_MS`
  * Määrittää vanhenemisajan, jonka jälkeen SAML-pyynnölle luotu Request ID ei ole kelvollinen, jos se näkyy SAML-vastauksessa `InResponseTo` kentässä. Oletus: 28800000 (8 tuntia).
* `OVERLEAF_SAML_LOGOUT_URL`
  * perusosoite, johon kirjautumispyynnöt lähetetään (oletus: `entryPoint`).
    * Esimerkki: `https://idp.example.com/simplesaml/saml2/idp/SingleLogoutService.php`
* `OVERLEAF_SAML_ADDITIONAL_LOGOUT_PARAMS`
  * JSON-sanakirja lisäkyselyparametreista, jotka lisätään 'logout'-pyyntöihin.
* `OVERLEAF_SAML_IS_ADMIN_FIELD` ja `OVERLEAF_SAML_IS_ADMIN_FIELD_VALUE`
  * Kun molemmat ympäristömuuttujat on asetettu, kirjautumisprosessi päivittää `user.isAdmin = true` jos SAML IdP:n palauttama profiili sisältää attribuutin, joka on määritetty `OVERLEAF_SAML_IS_ADMIN_FIELD` ja sen arvo joko vastaa `OVERLEAF_SAML_IS_ADMIN_FIELD_VALUE` tai on taulukko, joka sisältää `OVERLEAF_SAML_IS_ADMIN_FIELD_VALUE`, muuten `user.isAdmin` on asetettu arvoon `false`. Jos kumpaakaan näistä muuttujista ei ole asetettu, ylläpitäjätila asetetaan vain arvoon `true` ylläpitäjäkäyttäjän luomisen aikana Launchpadissa.

**Identity Providerin metatiedot**

Overleaf CE:n nykyinen versio sisältää päätepisteen Service Provider -metatietojen hakemiseen: `http://my-overleaf-instance.com/saml/meta`

Identity Provider on määritettävä tunnistamaan Overleaf-palvelin "Service Provider"-palveluntarjoajana. Katso SAML-palvelimesi dokumentaatiosta ohjeet, miten tämä tehdään.

Alla on esimerkki asianmukaisista Service Provider -metatiedoista:

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

Huomaa varmenteet, `AssertionConsumerService.Location`, `SingleLogoutService.Location` ja `EntityDescriptor.entityID` ja aseta ne tarvittaessa IdP-määrityksessä sopiviksi tai lähetä metatietotiedosto IdP:n ylläpitäjälle.

<details>

<summary><strong>Esimerkkitiedosto variables.env (vähimmäismalli)</strong></summary>

<pre><code>OVERLEAF_APP_NAME="Our Overleaf Instance"

ENABLED_LINKED_FILE_TYPES=project_file,project_output_file,url

# Ottaa pikkukuvien luonnin käyttöön ImageMagickillä
ENABLE_CONVERSIONS=true

# Poistaa sähköpostivahvistuksen vaatimuksen käytöstä
EMAIL_CONFIRMATION_DISABLED=true

## Nginx
# NGINX_WORKER_PROCESSES=4
# NGINX_WORKER_CONNECTIONS=768

## Aseta TLS:ää varten nginx-proxyn kautta
# OVERLEAF_BEHIND_PROXY=true
# OVERLEAF_SECURE_COOKIE=true

OVERLEAF_SITE_URL=http://my-overleaf-instance.com
OVERLEAF_NAV_TITLE=Meidän Overleaf-instanssimme
# OVERLEAF_HEADER_IMAGE_URL=http://somewhere.com/mylogo.png
OVERLEAF_ADMIN_EMAIL=support@example.com

OVERLEAF_LEFT_FOOTER=[{"text": "Ota yhteyttä tukitiimiisi", "url": "mailto:support@example.com"}]
OVERLEAF_RIGHT_FOOTER=[{"text":"Hei, olen oikealla", "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=Tätä järjestelmää ylläpitää osasto x

OVERLEAF_PROXY_LEARN=true
NAV_HIDE_POWERED_BY=true

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

EXTERNAL_AUTH=saml
OVERLEAF_SAML_ISSUER=MyOverleaf
OVERLEAF_SAML_IDENTITY_SERVICE_NAME='Kirjaudu sisään SAML-palveluntarjoajalla'
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/fi/konfiguraatio/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.
