> 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/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 är aktiverade. 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 Identity Provider-webbplatsen (IdP) för autentisering. Om IdP lyckas autentisera användaren kontrolleras databasen över Overleaf-användare efter en post som innehåller en `samlIdentifiers` fält strukturerat enligt följande:

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

Fältet `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öker 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` i `samlIdentifiers` är fast inställt på `'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: `nameID`.
* `OVERLEAF_SAML_EMAIL_FIELD`
  * Namnet på fältet Email i användarprofilen, har som standard `nameID`.
* `OVERLEAF_SAML_FIRST_NAME_FIELD`
  * Namnet på fältet firstName i användarprofilen, har som standard `givenName`.
* `OVERLEAF_SAML_LAST_NAME_FIELD`
  * Namnet på fältet lastName i användarprofilen, har som standard `lastName`
* `OVERLEAF_SAML_UPDATE_USER_DETAILS_ON_LOGIN`
  * Om den sätts till `true`, uppdaterar användarens `förnamn` och `efternamn` fältet vid inloggning och stäng av formuläret för användaruppgifter vid `/user/settings` sidan.
* `OVERLEAF_SAML_ENTRYPOINT` **(krävs)**
  * Start-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, har som standard värdet av `OVERLEAF_SAML_ISSUER`.
* `OVERLEAF_SAML_IDP_CERT` **(krävs)**
  * Sökväg till en fil som innehåller Identity Providers offentliga certifikat, används för att validera signaturerna i inkommande SAML-svar. Om Identity Provider 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 det offentliga signeringscertifikat som används för att bäddas in i autentiseringsförfrågningar så att IdP kan validera signaturerna i den inkommande SAML-förfrågan. Det krävs vid konfiguration av [metadataendpunkten](https://github.com/yu-i-i/overleaf-cep/wiki/Extended-CE:-SAML-Authentication#metadata-for-the-identity-provider) när strategin konfigureras med en `OVERLEAF_SAML_PRIVATE_KEY`. En JSON-array med sökvägar till certifikat kan tillhandahållas för att stödja certifikatrotation. När en array med certifikat anges bör det första objektet i arrayen matcha det aktuella `OVERLEAF_SAML_PRIVATE_KEY`. Ytterligare poster i arrayen kan användas för att publicera kommande certifikat till IdP:er innan man ä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 `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 ett offentligt certifikat, används för [metadataendpunkten](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 en privat nyckel som matchar `OVERLEAF_SAML_DECRYPTION_CERT` som kommer att användas för att försöka dekryptera eventuella krypterade påståenden som tas emot.
* `OVERLEAF_SAML_SIGNATURE_ALGORITHM`
  * Ange valfritt signaturalgoritmen för att signera förfrågningar; giltiga värden är 'sha1' (standard), 'sha256' (föredras), 'sha512' (säkrast, kontrollera om din IdP stöder det).
* `OVERLEAF_SAML_ADDITIONAL_PARAMS`
  * JSON-ordbok med ytterligare frågeparametrar som ska läggas till i alla förfrågningar.
* `OVERLEAF_SAML_ADDITIONAL_AUTHORIZE_PARAMS`
  * JSON-ordbok med ytterligare frågeparametrar som ska läggas till i 'authorize'-förfrågningar.
    * Exempel: `{"some_key": "some_value"}`
* `OVERLEAF_SAML_IDENTIFIER_FORMAT`
  * Format för namnidentifieraren 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`
  * Tidsavvikelse i millisekunder som är acceptabel mellan klient och server vid kontroll av tidsstämplar för giltigheten hos påståendekonditionerna OnBefore och NotOnOrAfter. 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 som ska läggas till i AuthnRequest för att instruera IdP vilken attributuppsättning som ska bifogas svaret ([link](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 namnidentifierarformat som ska begära 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 ska tvinga fram ny autentisering av användaren, även om de har en giltig session.
* `OVERLEAF_SAML_DISABLE_REQUESTED_AUTHN_CONTEXT`
  * Om `true`, begär ingen specifik autentiseringskontext. Du kan till exempel ställa in detta till `true` för att tillåta ytterligare kontexter såsom lösenordsfria inloggningar (`urn:oasis:names:tc:SAML:2.0:ac:classes:X509`). Stöd för ytterligare kontexter är beroende av din IdP.
* `OVERLEAF_SAML_AUTHN_REQUEST_BINDING`
  * Om den sätts 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 `always`, kommer InResponseTo att valideras mot inkommande SAML-svar.
  * Om `aldrig`, kommer InResponseTo inte att valideras (standard).
  * Om `ifPresent`, kommer InResponseTo endast att valideras om det finns i det inkommande SAML-svaret.
* `OVERLEAF_SAML_WANT_ASSERTIONS_SIGNED` och `OVERLEAF_SAML_WANT_AUTHN_RESPONSE_SIGNED`
  * När den sätts till `true` (standard) förväntar sig Overleaf att SAML-påståendena, respektive hela SAML-autentiseringssvaren, är signerade av IdP. När båda alternativen är `false`, måste åtminstone ett av påståendena eller svaret vara signerat.
* `OVERLEAF_SAML_REQUEST_ID_EXPIRATION_PERIOD_MS`
  * Definierar förfallotiden då ett Request ID som genererats för en SAML-förfrågan inte är giltigt om det förekommer i ett SAML-svar i `InResponseTo` fältet. Standard: 28800000 (8 timmar).
* `OVERLEAF_SAML_LOGOUT_URL`
  * grundadress 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 som ska läggas 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` är satt till `false`. Om någon av dessa variabler inte är satt sätts administratörsstatusen endast till `true` under skapandet 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 Service Provider-metadata: `http://my-overleaf-instance.com/saml/meta`

Identity Provider måste konfigureras för att känna igen Overleaf-servern som en "Service Provider". Se dokumentationen för din SAML-server för instruktioner om hur detta görs.

Nedan följer ett exempel på lämplig Service Provider-metadata:

<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 ställ in dem lämpligt i din IdP-konfiguration, eller skicka metadatาฟilen till IdP-administratören.

<details>

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

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

ENABLED_LINKED_FILE_TYPES=project_file,project_output_file,url

# Aktiverar generering av miniatyrbilder med hjälp av ImageMagick
ENABLE_CONVERSIONS=true

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

## Nginx
# NGINX_WORKER_PROCESSES=4
# NGINX_WORKER_CONNECTIONS=768

## Ställ in 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=Our Overleaf Instance
# 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 på höger sida", "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=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/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.
