> 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/fi/maaritys/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ässä tarjoamme joitakin asiakirjoja konfiguraatiotasi varten.

### Määritys

Sisäisesti Overleafin SAML-moduuli käyttää [passport-saml](https://github.com/node-saml/passport-saml) kirjastoa, ja useimmat seuraavista asetuksista välitetään suoraan `passport-saml`. Jos sinulla on ongelmia SAML:n määrittämisessä, kannattaa lukea README-tiedosto kohteelle `passport-saml` README, jotta saat käsityksen siitä, mitä määritystä se odottaa.

Ympäristömuuttuja `EXTERNAL_AUTH` vaaditaan SAML-tunnistusmoduulin käyttöönottoon. Tämä ympäristömuuttuja määrittää, mitkä ulkoiset tunnistusmenetelmät aktivoidaan. Tämän muuttujan arvo on lista. Jos lista sisältää `saml` SAML-tunnistus aktivoidaan.

Esimerkiksi: `EXTERNAL_AUTH=ldap saml`

Kun käytetään SAML-tunnistusmenetelmää, käyttäjä ohjataan Identity Providerin (IdP) tunnistussivustolle. Jos IdP tunnistaa käyttäjän onnistuneesti, Overleafin käyttäjätietokannasta etsitään tietue, joka sisältää `samlIdentifiers` kentän, jonka rakenne on seuraava:

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

Kentän `externalUserId` sen on vastattava ominaisuuden arvoa, joka on määritetty kohdassa `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:n käyttäjäprofiilissa olevaa sähköpostiosoitetta:

* Jos tällainen käyttäjä löytyy, `hashedPassword` kenttä poistetaan paikallisen tunnistautumisen käytöstä poistamiseksi, 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ä vain yksi SAML IdP on tuettu.  `providerId` kenttä kohdassa `samlIdentifiers` on määritetty arvoksi `'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äyttää Overleaf ulkoisena käyttäjätunnuksena, oletusarvoisesti `nameID`.
* `OVERLEAF_SAML_EMAIL_FIELD`
  * Sähköpostikentän nimi käyttäjäprofiilissa, oletusarvo on `nameID`.
* `OVERLEAF_SAML_FIRST_NAME_FIELD`
  * firstName-kentän nimi käyttäjäprofiilissa, oletusarvo on `givenName`.
* `OVERLEAF_SAML_LAST_NAME_FIELD`
  * lastName-kentän nimi käyttäjäprofiilissa, oletusarvo on `lastName`
* `OVERLEAF_SAML_UPDATE_USER_DETAILS_ON_LOGIN`
  * Jos arvoksi asetetaan `true`, päivittää käyttäjän `etunimi` ja `sukunimi` kenttä kirjautumisen yhteydessä, ja poista käyttäjätietolomake käytöstä kohdassa `/user/settings` sivu.
* `OVERLEAF_SAML_ENTRYPOINT` **(vaaditaan)**
  * SAML-tunnistuspalvelun aloitus-URL.
    * 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` **(vaaditaan)**
  * Myöntäjän nimi.
* `OVERLEAF_SAML_AUDIENCE`
  * Odotettu SAML-vastauksen Audience, oletusarvo on `OVERLEAF_SAML_ISSUER`.
* `OVERLEAF_SAML_IDP_CERT` **(vaaditaan)**
  * Polku tiedostoon, joka sisältää Identity Providerin julkisen varmenteen, jota käytetään saapuvien SAML-vastausten allekirjoitusten validointiin. Jos Identity Providerilla on useita kelvollisia allekirjoitusvarmenteita, se voi olla JSON-taulukko poluista varmenteisiin.
    * 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 upotettuna tunnistuspyynnöissä, jotta IdP voi validoida saapuvan SAML-pyynnön allekirjoitukset. Se vaaditaan, kun otetaan käyttöön [metatietopäätepistettä](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 kierrätyksen tukemiseksi voidaan antaa JSON-taulukko varmenteiden poluista. Kun annetaan varmenne­taulukko, taulukon ensimmäisen merkinnän tulee vastata nykyistä `OVERLEAF_SAML_PRIVATE_KEY`. Taulukon lisämerkintöjä voidaan käyttää tulevien varmenteiden julkaisemiseen IdP:ille ennen kuin muutetaan `OVERLEAF_SAML_PRIVATE_KEY`.
* `OVERLEAF_SAML_PRIVATE_KEY`
  * Polku tiedostoon, joka sisältää PEM-muotoisen yksityisen avaimen, joka vastaa `OVERLEAF_SAML_PUBLIC_CERT` ja jota käytetään passport-saml:n lähettämien tunnistuspyyntöjen allekirjoittamiseen.
* `OVERLEAF_SAML_DECRYPTION_CERT`
  * Polku tiedostoon, joka sisältää julkisen varmenteen, jota käytetään [metatietopäätepistettä](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 vastaanotettujen salattujen väitteiden purkuyrityksiin.
* `OVERLEAF_SAML_SIGNATURE_ALGORITHM`
  * Voit halutessasi asettaa pyyntöjen allekirjoittamiseen käytettävän allekirjoitusalgoritmin; 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 tunnistuspalvelimelta (oletus: `urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress`). Jos käytetään `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 kellon heittoa sallitaan asiakkaan ja palvelimen välillä tarkistettaessa OnBefore- ja NotOnOrAfter-väitteen ehtojen voimassaoloaikoja. Arvoksi -1 asettaminen poistaa näiden ehtojen tarkistamisen kokonaan käytöstä. Oletus on 0.
* `OVERLEAF_SAML_ATTRIBUTE_CONSUMING_SERVICE_INDEX`
  * `AttributeConsumingServiceIndex` ominaisuus, joka lisätään AuthnRequestiin ohjaamaan IdP:tä siitä, mikä ominaisuusjoukko 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 muodon arvoista, joilla pyydetään todennuskontekstia. Oletus: `["urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport"]`.
* `OVERLEAF_SAML_FORCE_AUTHN`
  * Jos `true`, palveluntarjoajan ensimmäinen SAML-pyyntö määrittää, että IdP:n tulee pakottaa käyttäjän uudelleentodennus, vaikka hänellä olisi voimassa oleva istunto.
* `OVERLEAF_SAML_DISABLE_REQUESTED_AUTHN_CONTEXT`
  * Jos `true`, älä pyydä tiettyä todennuskontekstia. Voit esimerkiksi asettaa tämän arvoksi `true` sallimaan lisäkonteksteja, 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 arvoksi asetetaan `HTTP-POST`, pyytää todennusta IdP:ltä HTTP POST -sidonnan kautta, muuten oletusarvo on HTTP-Redirect.
* `OVERLEAF_SAML_VALIDATE_IN_RESPONSE_TO`
  * Jos `always`, silloin InResponseTo validoidaan saapuvista SAML-vastauksista.
  * Jos `ei koskaan`, silloin InResponseTo:a 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 arvoksi asetetaan `true` (oletus), Overleaf odottaa SAML-väitteiden ja vastaavasti koko SAML-todennusvastauksen olevan IdP:n allekirjoittamia. Kun molemmat asetukset ovat `false`, vähintään yhden väitteen tai vastauksen on oltava allekirjoitettu.
* `OVERLEAF_SAML_REQUEST_ID_EXPIRATION_PERIOD_MS`
  * Määrittää vanhenemisajan, jonka jälkeen SAML-pyyntöä varten luotu Request ID ei ole kelvollinen, jos se näkyy SAML-vastauksessa kohdassa `InResponseTo` kenttä. 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ää ominaisuuden, joka on määritetty kohdassa `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 jompikumpi näistä muuttujista ei ole asetettu, järjestelmänvalvojan tila asetetaan vain `true` Launchpadissa tapahtuvan ylläpitäjäkäyttäjän luonnin aikana.

**Identity Providerin metatiedot**

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

Identity Provider on määritettävä tunnistamaan Overleaf-palvelin "Service Provideriksi". Katso SAML-palvelimesi dokumentaatiosta ohjeet tähä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 asianmukaisesti IdP-konfiguraatiossasi, tai lähetä metatiedosto IdP:n ylläpitäjälle.

<details>

<summary><strong>Esimerkkitiedosto variables.env (minimi)</strong></summary>

<pre><code>OVERLEAF_APP_NAME="Meidän Overleaf-instanssimme"

ENABLED_LINKED_FILE_TYPES=project_file,project_output_file,url

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

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

## Nginx
# NGINX_WORKER_PROCESSES=4
# NGINX_WORKER_CONNECTIONS=768

## Aseta TLS käyttöön nginx-proxyn kautta
# OVERLEAF_BEHIND_PROXY=true
# OVERLEAF_SECURE_COOKIE=true

OVERLEAF_SITE_URL=http://my-overleaf-instance.com
OVERLEAF_NAV_TITLE=Oma 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=Sähköposti
OVERLEAF_SAML_FIRST_NAME_FIELD=Näyttönimi
OVERLEAF_SAML_LAST_NAME_FIELD=Näyttönimi
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/fi/maaritys/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.
