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

# SAML-autentisering

Denna funktion är utvecklad av [yu-i-i/overleaf-cep](https://github.com/yu-i-i/overleaf-cep). Här erbjuder vi några dokument för din konfiguration.

### Konfiguration

Internt använder Overleafs SAML-modul [passport-saml](https://github.com/node-saml/passport-saml) biblioteket, och de flesta av följande konfigurationsalternativ skickas vidare till `passport-saml`. Om du har problem med att konfigurera SAML är det värt att läsa README-filen för `passport-saml` för att få en känsla för den konfiguration den förväntar sig.

Miljövariabeln `EXTERNAL_AUTH` krävs för att aktivera SAML-autentiseringsmodulen. Denna miljövariabel anger vilka externa autentiseringsmetoder som aktiveras. Värdet för denna variabel är en lista. Om listan innehåller `saml` aktiveras SAML-autentisering.

Till exempel: `EXTERNAL_AUTH=ldap saml`

När SAML-autentiseringsmetoden används omdirigeras en användare till autentiseringssidan hos identitetsleverantören (IdP). Om IdP:n lyckas autentisera användaren kontrolleras Overleafs användardatabas efter en post som innehåller en `samlIdentifiers` fältet strukturerat enligt följande:

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

Den `externalUserId` måste matcha värdet för egenskapen som anges av `userIdAttribute` i användarprofilen som returneras av IdP-servern.

Om ingen matchande post hittas söks databasen efter en användare med den primära e-postadressen som matchar e-postadressen i IdP-användarprofilen:

* Om en sådan användare hittas uppdateras `hashedPassword` fältet tas bort för att inaktivera lokal autentisering, och `samlIdentifiers` fältet läggs till.
* Om ingen matchande användare hittas skapas en ny användare med e-postadressen och `samlIdentifiers` från IdP-profilen.

**Obs:** För närvarande stöds endast en SAML IdP. Fältet `providerId` fältet i `samlIdentifiers` är låst till `'1'`.

#### Miljövariabler

* `OVERLEAF_SAML_IDENTITY_SERVICE_NAME`
  * Visningsnamn för identitetstjänsten, används på inloggningssidan (standard: `Logga in med SAML IdP`).
* `OVERLEAF_SAML_USER_ID_FIELD`
  * Värdet på detta attribut kommer att användas av Overleaf som det externa användar-ID:t, standardvärde är `nameID`.
* `OVERLEAF_SAML_EMAIL_FIELD`
  * Namnet på fältet för e-post i användarprofilen, standardvärde är `nameID`.
* `OVERLEAF_SAML_FIRST_NAME_FIELD`
  * Namnet på fältet firstName i användarprofilen, standardvärde är `givenName`.
* `OVERLEAF_SAML_LAST_NAME_FIELD`
  * Namnet på fältet lastName i användarprofilen, standardvärde är `lastName`
* `OVERLEAF_SAML_UPDATE_USER_DETAILS_ON_LOGIN`
  * Om den är satt till `true`, uppdaterar användarens `first_name` och `last_name` fält vid inloggning och stäng av formuläret för användaruppgifter på `/user/settings` sidan.
* `OVERLEAF_SAML_ENTRYPOINT` **(krävs)**
  * Ingångs-URL för SAML-identitetstjänsten.
    * Exempel: `https://idp.example.com/simplesaml/saml2/idp/SSOService.php`
    * Azure-exempel: `https://login.microsoftonline.com/8b26b46a-6dd3-45c7-a104-f883f4db1f6b/saml2`
* `OVERLEAF_SAML_ISSUER` **(krävs)**
  * Utfärdarens namn.
* `OVERLEAF_SAML_AUDIENCE`
  * Förväntad Audience i SAML-svaret, standardvärde är värdet för `OVERLEAF_SAML_ISSUER`.
* `OVERLEAF_SAML_IDP_CERT` **(krävs)**
  * Sökväg till en fil som innehåller identitetsleverantörens publika certifikat, som används för att validera signaturerna i inkommande SAML-svar. Om identitetsleverantören har flera giltiga signeringscertifikat kan det vara en JSON-array med sökvägar till certifikaten.
    * Exempel (ett certifikat): `/var/lib/overleaf/certs/idp_cert.pem`
    * Exempel (flera certifikat): `["var/lib/overleaf/certs/idp_cert.pem", "/var/lib/overleaf/certs/idp_cert_old.pem"]`
* `OVERLEAF_SAML_PUBLIC_CERT`
  * Sökväg till en fil som innehåller publikt signeringscertifikat som ska bäddas in i autentiseringsförfrågningar så att IdP:n kan validera signaturerna i den inkommande SAML-förfrågan. Det krävs när man konfigurerar [metadata-endpointen](https://github.com/yu-i-i/overleaf-cep/wiki/Extended-CE:-SAML-Authentication#metadata-for-the-identity-provider) när strategin är konfigurerad med en `OVERLEAF_SAML_PRIVATE_KEY`. En JSON-array med sökvägar till certifikat kan anges för att stödja certifikatrotation. När du anger en array med certifikat bör det första elementet i arrayen matcha den aktuella `OVERLEAF_SAML_PRIVATE_KEY`. Ytterligare poster i arrayen kan användas för att publicera kommande certifikat till IdP:er innan du ändrar `OVERLEAF_SAML_PRIVATE_KEY`.
* `OVERLEAF_SAML_PRIVATE_KEY`
  * Sökväg till en fil som innehåller en PEM-formaterad privat nyckel som matchar den `OVERLEAF_SAML_PUBLIC_CERT` som används för att signera autentiseringsförfrågningar som skickas av passport-saml.
* `OVERLEAF_SAML_DECRYPTION_CERT`
  * Sökväg till en fil som innehåller publikt certifikat, används för [metadata-endpointen](https://github.com/yu-i-i/overleaf-cep/wiki/Extended-CE:-SAML-Authentication#metadata-for-the-identity-provider).
* `OVERLEAF_SAML_DECRYPTION_PVK`
  * Sökväg till en fil som innehåller privat nyckel som matchar den `OVERLEAF_SAML_DECRYPTION_CERT` som kommer att användas för att försöka dekryptera eventuella krypterade assertions som tas emot.
* `OVERLEAF_SAML_SIGNATURE_ALGORITHM`
  * Valfritt: ange signaturalgoritmen för signering av förfrågningar. Giltiga värden är 'sha1' (standard), 'sha256' (föredragen), 'sha512' (mest säker, kontrollera om din IdP stöder den).
* `OVERLEAF_SAML_ADDITIONAL_PARAMS`
  * JSON-ordbok med ytterligare frågeparametrar att lägga till i alla förfrågningar.
* `OVERLEAF_SAML_ADDITIONAL_AUTHORIZE_PARAMS`
  * JSON-ordbok med ytterligare frågeparametrar att lägga till i 'authorize'-förfrågningar.
    * Exempel: `{"some_key": "some_value"}`
* `OVERLEAF_SAML_IDENTIFIER_FORMAT`
  * Format för namnidentifierare som ska begäras från identitetsleverantören (standard: `urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress`). Om du använder `urn:oasis:names:tc:SAML:2.0:nameid-format:persistent`, se till att `OVERLEAF_SAML_EMAIL_FIELD` miljövariabeln är definierad. Om `urn:oasis:names:tc:SAML:2.0:nameid-format:transient` krävs måste du också definiera `OVERLEAF_SAML_ID_FIELD` miljövariabeln, som till exempel kan anges till användarens e-postadress.
* `OVERLEAF_SAML_ACCEPTED_CLOCK_SKEW_MS`
  * Tid i millisekunder för den förskjutning som är acceptabel mellan klient och server när giltighetstidsstämplarna för villkoren OnBefore och NotOnOrAfter i assertions kontrolleras. Om du sätter värdet till -1 inaktiveras kontrollen av dessa villkor helt. Standard är 0.
* `OVERLEAF_SAML_ATTRIBUTE_CONSUMING_SERVICE_INDEX`
  * `AttributeConsumingServiceIndex` attribut att lägga till i AuthnRequest för att ange för IdP:n vilken attributuppsättning som ska bifogas svaret ([länk](http://blog.aniljohn.com/2014/01/data-minimization-front-channel-saml-attribute-requests.html)).
* `OVERLEAF_SAML_AUTHN_CONTEXT`
  * JSON-array med värden för namnidentifierare som ska begäras som autentiseringskontext. Standard: `["urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport"]`.
* `OVERLEAF_SAML_FORCE_AUTHN`
  * Om `true`, anger den inledande SAML-förfrågan från tjänsteleverantören att IdP:n ska tvinga fram ny autentisering av användaren, även om användaren har en giltig session.
* `OVERLEAF_SAML_DISABLE_REQUESTED_AUTHN_CONTEXT`
  * Om `true`, begär inte någon specifik autentiseringskontext. Du kan till exempel ställa in detta till `true` för att tillåta ytterligare kontexter såsom lösenordslösa inloggningar (`urn:oasis:names:tc:SAML:2.0:ac:classes:X509`). Stöd för ytterligare kontexter beror på din IdP.
* `OVERLEAF_SAML_AUTHN_REQUEST_BINDING`
  * Om den är satt till `HTTP-POST`, kommer att begära autentisering från IdP via HTTP POST-bindning, annars används som standard HTTP-Redirect.
* `OVERLEAF_SAML_VALIDATE_IN_RESPONSE_TO`
  * Om `alltid`, valideras InResponseTo i inkommande SAML-svar.
  * Om `aldrig`, valideras inte InResponseTo (standard).
  * Om `ifPresent`, valideras InResponseTo endast om det finns i det inkommande SAML-svaret.
* `OVERLEAF_SAML_WANT_ASSERTIONS_SIGNED` och `OVERLEAF_SAML_WANT_AUTHN_RESPONSE_SIGNED`
  * När den är satt till `true` (standard) förväntar sig Overleaf att SAML-assertions, respektive hela SAML-autentiseringssvar, är signerade av IdP:n. När båda alternativen är `false`, måste minst en av assertions eller svaret vara signerat.
* `OVERLEAF_SAML_REQUEST_ID_EXPIRATION_PERIOD_MS`
  * Definierar utgångstiden då ett Request ID som genereras för en SAML-förfrågan inte längre är giltigt om det ses i ett SAML-svar i fältet `InResponseTo` Fält. Standard: 28800000 (8 timmar).
* `OVERLEAF_SAML_LOGOUT_URL`
  * basadress att anropa med utloggningsförfrågningar (standard: `entryPoint`).
    * Exempel: `https://idp.example.com/simplesaml/saml2/idp/SingleLogoutService.php`
* `OVERLEAF_SAML_ADDITIONAL_LOGOUT_PARAMS`
  * JSON-ordbok med ytterligare frågeparametrar att lägga till i 'logout'-förfrågningar.
* `OVERLEAF_SAML_IS_ADMIN_FIELD` och `OVERLEAF_SAML_IS_ADMIN_FIELD_VALUE`
  * När båda miljövariablerna är satta uppdaterar inloggningsprocessen `user.isAdmin = true` om profilen som returneras av SAML IdP innehåller attributet som anges av `OVERLEAF_SAML_IS_ADMIN_FIELD` och dess värde antingen matchar `OVERLEAF_SAML_IS_ADMIN_FIELD_VALUE` eller är en array som innehåller `OVERLEAF_SAML_IS_ADMIN_FIELD_VALUE`, annars `user.isAdmin` sätts till `false`. Om någon av dessa variabler inte är satt sätts administratörsstatus endast till `true` vid skapande av administratörsanvändare i Launchpad.

**Metadata för identitetsleverantören**

Den aktuella versionen av Overleaf CE innehåller en endpoint för att hämta tjänsteleverantörens metadata: `http://my-overleaf-instance.com/saml/meta`

Identitetsleverantören måste konfigureras så att den känner igen Overleaf-servern som en "Service Provider". Se dokumentationen för din SAML-server för instruktioner om hur du gör detta.

Nedan visas ett exempel på lämplig metadata för tjänsteleverantören:

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

Observera certifikaten, `AssertionConsumerService.Location`, `SingleLogoutService.Location` och `EntityDescriptor.entityID` och ange dem lämpligt i din IdP-konfiguration, eller skicka metadatafilen till IdP-administratören.

<details>

<summary><strong>Exempel på filen variables.env (minimum)</strong></summary>

<pre><code>OVERLEAF_APP_NAME="Vår Overleaf-instans"

ENABLED_LINKED_FILE_TYPES=project_file,project_output_file,url

# Aktiverar skapande av miniatyrer med ImageMagick
ENABLE_CONVERSIONS=true

# Inaktiverar kravet på e-postbekräftelse
EMAIL_CONFIRMATION_DISABLED=true

## Nginx
# NGINX_WORKER_PROCESSES=4
# NGINX_WORKER_CONNECTIONS=768

## Ange för TLS via nginx-proxy
# OVERLEAF_BEHIND_PROXY=true
# OVERLEAF_SECURE_COOKIE=true

OVERLEAF_SITE_URL=http://my-overleaf-instance.com
OVERLEAF_NAV_TITLE=Vår Overleaf-instans
# OVERLEAF_HEADER_IMAGE_URL=http://somewhere.com/mylogo.png
OVERLEAF_ADMIN_EMAIL=support@example.com

OVERLEAF_LEFT_FOOTER=[{"text": "Kontakta ditt supportteam", "url": "mailto:support@example.com"}]
OVERLEAF_RIGHT_FOOTER=[{"text":"Hej, jag är till höger", "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=Detta system drivs av avdelning x

OVERLEAF_PROXY_LEARN=true
NAV_HIDE_POWERED_BY=true

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

EXTERNAL_AUTH=saml
OVERLEAF_SAML_ISSUER=MyOverleaf
OVERLEAF_SAML_IDENTITY_SERVICE_NAME='Logga in med SAML-leverantör'
OVERLEAF_SAML_EMAIL_FIELD=E-post
OVERLEAF_SAML_FIRST_NAME_FIELD=Visningsnamn
OVERLEAF_SAML_LAST_NAME_FIELD=Visningsnamn
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/sv/konfiguration/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.
