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

# SAML-autentificering

Denne funktion er udviklet af [yu-i-i/overleaf-cep](https://github.com/yu-i-i/overleaf-cep). Her tilbyder vi nogle dokumenter til din konfiguration.

### Konfiguration

Internt bruger Overleafs SAML-modul [passport-saml](https://github.com/node-saml/passport-saml) biblioteket; de fleste af følgende konfigurationsindstillinger sendes videre til `passport-saml`. Hvis du har problemer med at konfigurere SAML, er det værd at læse README for `passport-saml` for at få en fornemmelse af den konfiguration, den forventer.

Miljøvariablen `EXTERNAL_AUTH` er påkrævet for at aktivere SAML-autentificeringsmodulet. Denne miljøvariabel angiver, hvilke eksterne autentificeringsmetoder der er aktiveret. Værdien af denne variabel er en liste. Hvis listen indeholder `saml` så vil SAML-autentificering blive aktiveret.

For eksempel: `EXTERNAL_AUTH=ldap saml`

Når SAML-autentificeringsmetoden bruges, bliver en bruger omdirigeret til autentificeringssiden hos identitetsudbyderen (IdP). Hvis IdP'en godkender brugeren, kontrolleres Overleafs brugerdatabase for en post, der indeholder en `samlIdentifiers` felt struktureret som følger:

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

Det `externalUserId` skal matche værdien af den egenskab, der er angivet ved `userIdAttribute` i brugerprofilen, der returneres af IdP-serveren.

Hvis der ikke findes nogen matchende post, gennemsøges databasen for en bruger med den primære e-mailadresse, der matcher e-mailen i IdP-brugerprofilen:

* Hvis en sådan bruger findes, opdateres `hashedPassword` feltet slettes for at deaktivere lokal autentificering, og `samlIdentifiers` feltet tilføjes.
* Hvis ingen matchende bruger findes, oprettes en ny bruger med e-mailadressen og `samlIdentifiers` fra IdP-profilen.

**Bemærk:** I øjeblikket understøttes kun én SAML IdP.  `providerId` feltet i `samlIdentifiers` er fastsat til `'1'`.

#### Miljøvariabler

* `OVERLEAF_SAML_IDENTITY_SERVICE_NAME`
  * Visningsnavn for identitetstjenesten, bruges på loginsiden (standard: `Log ind med SAML IdP`).
* `OVERLEAF_SAML_USER_ID_FIELD`
  * Værdien af dette attribut vil blive brugt af Overleaf som det eksterne bruger-ID, standard er `nameID`.
* `OVERLEAF_SAML_EMAIL_FIELD`
  * Navnet på Email-feltet i brugerprofilen, standard er `nameID`.
* `OVERLEAF_SAML_FIRST_NAME_FIELD`
  * Navnet på firstName-feltet i brugerprofilen, standard er `givenName`.
* `OVERLEAF_SAML_LAST_NAME_FIELD`
  * Navnet på lastName-feltet i brugerprofilen, standard er `lastName`
* `OVERLEAF_SAML_UPDATE_USER_DETAILS_ON_LOGIN`
  * Hvis sat til `true`, opdaterer brugerens `first_name` og `last_name` feltet ved login, og slå formularen til brugeroplysninger fra på `/user/settings` siden.
* `OVERLEAF_SAML_ENTRYPOINT` **(påkrævet)**
  * Startpunkt-URL for SAML-identitetstjenesten.
    * Eksempel: `https://idp.example.com/simplesaml/saml2/idp/SSOService.php`
    * Azure-eksempel: `https://login.microsoftonline.com/8b26b46a-6dd3-45c7-a104-f883f4db1f6b/saml2`
* `OVERLEAF_SAML_ISSUER` **(påkrævet)**
  * Issuer-navnet.
* `OVERLEAF_SAML_AUDIENCE`
  * Forventet Audience i SAML-svaret, standard er værdien af `OVERLEAF_SAML_ISSUER`.
* `OVERLEAF_SAML_IDP_CERT` **(påkrævet)**
  * Sti til en fil, der indeholder identitetsudbyderens offentlige certifikat, som bruges til at validere signaturerne på indgående SAML-svar. Hvis identitetsudbyderen har flere gyldige signeringscertifikater, kan det være et JSON-array af stier til certifikaterne.
    * Eksempel (ét certifikat): `/var/lib/overleaf/certs/idp_cert.pem`
    * Eksempel (flere certifikater): `["var/lib/overleaf/certs/idp_cert.pem", "/var/lib/overleaf/certs/idp_cert_old.pem"]`
* `OVERLEAF_SAML_PUBLIC_CERT`
  * Sti til en fil, der indeholder det offentlige signeringscertifikat, som indsættes i autentificeringsforespørgsler, så IdP'en kan validere signaturerne på den indgående SAML-forespørgsel. Det er påkrævet ved opsætning af [metadata-endepunktet](https://github.com/yu-i-i/overleaf-cep/wiki/Extended-CE:-SAML-Authentication#metadata-for-the-identity-provider) når strategien er konfigureret med en `OVERLEAF_SAML_PRIVATE_KEY`. Der kan angives et JSON-array af stier til certifikater for at understøtte certifikatrotering. Når der angives et array af certifikater, bør den første post i arrayet matche det aktuelle `OVERLEAF_SAML_PRIVATE_KEY`. Yderligere poster i arrayet kan bruges til at offentliggøre kommende certifikater til IdP'er, før man ændrer `OVERLEAF_SAML_PRIVATE_KEY`.
* `OVERLEAF_SAML_PRIVATE_KEY`
  * Sti til en fil, der indeholder en PEM-formateret privat nøgle, der matcher den `OVERLEAF_SAML_PUBLIC_CERT` som bruges til at signere autentificeringsforespørgsler sendt af passport-saml.
* `OVERLEAF_SAML_DECRYPTION_CERT`
  * Sti til en fil, der indeholder det offentlige certifikat, som bruges til [metadata-endepunktet](https://github.com/yu-i-i/overleaf-cep/wiki/Extended-CE:-SAML-Authentication#metadata-for-the-identity-provider).
* `OVERLEAF_SAML_DECRYPTION_PVK`
  * Sti til en fil, der indeholder den private nøgle, der matcher den `OVERLEAF_SAML_DECRYPTION_CERT` som vil blive brugt til at forsøge at dekryptere eventuelle krypterede assertioner, der modtages.
* `OVERLEAF_SAML_SIGNATURE_ALGORITHM`
  * Angiv eventuelt signaturalgoritmen til signering af forespørgsler; gyldige værdier er 'sha1' (standard), 'sha256' (foretrukket), 'sha512' (mest sikkert, tjek om din IdP understøtter det).
* `OVERLEAF_SAML_ADDITIONAL_PARAMS`
  * JSON-ordbog med yderligere forespørgselsparametre, der tilføjes alle forespørgsler.
* `OVERLEAF_SAML_ADDITIONAL_AUTHORIZE_PARAMS`
  * JSON-ordbog med yderligere forespørgselsparametre, der tilføjes forespørgsler om 'authorize'.
    * Eksempel: `{"some_key": "some_value"}`
* `OVERLEAF_SAML_IDENTIFIER_FORMAT`
  * Navneidentifikatorformat, der skal anmodes om fra identitetsudbyderen (standard: `urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress`). Hvis du bruger `urn:oasis:names:tc:SAML:2.0:nameid-format:persistent`, skal du sørge for, at `OVERLEAF_SAML_EMAIL_FIELD` miljøvariablen er defineret. Hvis `urn:oasis:names:tc:SAML:2.0:nameid-format:transient` er påkrævet, skal du også definere `OVERLEAF_SAML_ID_FIELD` miljøvariablen, som for eksempel kan sættes til brugerens e-mailadresse.
* `OVERLEAF_SAML_ACCEPTED_CLOCK_SKEW_MS`
  * Den accepterede tidsforskydning i millisekunder mellem klient og server ved kontrol af gyldighedstidsstemplerne for OnBefore- og NotOnOrAfter-assertionsbetingelserne. Sættes den til -1, deaktiveres kontrollen af disse betingelser helt. Standard er 0.
* `OVERLEAF_SAML_ATTRIBUTE_CONSUMING_SERVICE_INDEX`
  * `AttributeConsumingServiceIndex` attribut, der tilføjes til AuthnRequest for at instruere IdP'en om, hvilket attributsæt der skal vedhæftes svaret ([link](http://blog.aniljohn.com/2014/01/data-minimization-front-channel-saml-attribute-requests.html)).
* `OVERLEAF_SAML_AUTHN_CONTEXT`
  * JSON-array af navneidentifikatorformatværdier til at anmode om autentificeringskontekst. Standard: `["urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport"]`.
* `OVERLEAF_SAML_FORCE_AUTHN`
  * Hvis `true`, angiver den indledende SAML-forespørgsel fra tjenesteudbyderen, at IdP'en skal tvinge brugeren til at autentificere sig igen, selv hvis vedkommende har en gyldig session.
* `OVERLEAF_SAML_DISABLE_REQUESTED_AUTHN_CONTEXT`
  * Hvis `true`, anmod ikke om en bestemt autentificeringskontekst. For eksempel kan du sætte dette til `true` for at tillade yderligere kontekster såsom adgangskodefri logins (`urn:oasis:names:tc:SAML:2.0:ac:classes:X509`). Understøttelse af yderligere kontekster afhænger af din IdP.
* `OVERLEAF_SAML_AUTHN_REQUEST_BINDING`
  * Hvis sat til `HTTP-POST`, vil anmode om autentificering fra IdP via HTTP POST-binding; ellers er standarden HTTP-Redirect.
* `OVERLEAF_SAML_VALIDATE_IN_RESPONSE_TO`
  * Hvis `altid`, vil InResponseTo blive valideret ud fra indgående SAML-svar.
  * Hvis `aldrig`, vil InResponseTo ikke blive valideret (standard).
  * Hvis `ifPresent`, vil InResponseTo kun blive valideret, hvis den er til stede i det indgående SAML-svar.
* `OVERLEAF_SAML_WANT_ASSERTIONS_SIGNED` og `OVERLEAF_SAML_WANT_AUTHN_RESPONSE_SIGNED`
  * Når sat til `true` (standard), forventer Overleaf, at SAML-assertions og henholdsvis hele SAML-autentificeringssvaret er signeret af IdP'en. Når begge indstillinger er `false`, skal mindst én af assertionerne eller svaret være signeret.
* `OVERLEAF_SAML_REQUEST_ID_EXPIRATION_PERIOD_MS`
  * Definerer udløbstiden, hvorefter et Request ID, der genereres til en SAML-forespørgsel, ikke længere er gyldigt, hvis det ses i et SAML-svar i feltet `InResponseTo` Feltet. Standard: 28800000 (8 timer).
* `OVERLEAF_SAML_LOGOUT_URL`
  * basisadresse, der kaldes med logout-forespørgsler (standard: `entryPoint`).
    * Eksempel: `https://idp.example.com/simplesaml/saml2/idp/SingleLogoutService.php`
* `OVERLEAF_SAML_ADDITIONAL_LOGOUT_PARAMS`
  * JSON-ordbog med yderligere forespørgselsparametre, der tilføjes forespørgsler om 'logout'.
* `OVERLEAF_SAML_IS_ADMIN_FIELD` og `OVERLEAF_SAML_IS_ADMIN_FIELD_VALUE`
  * Når begge miljøvariabler er angivet, opdaterer loginprocessen `user.isAdmin = true` hvis profilen, der returneres af SAML IdP'en, indeholder den attribut, der er angivet af `OVERLEAF_SAML_IS_ADMIN_FIELD` og dens værdi enten matcher `OVERLEAF_SAML_IS_ADMIN_FIELD_VALUE` eller er en array, der indeholder `OVERLEAF_SAML_IS_ADMIN_FIELD_VALUE`, ellers `user.isAdmin` er sat til `false`. Hvis en af disse variabler ikke er angivet, sættes administratorstatus kun til `true` under oprettelse af admin-brugere i Launchpad.

**Metadata for identitetsudbyderen**

Den nuværende version af Overleaf CE inkluderer et endepunkt til at hente Service Provider-metadata: `http://my-overleaf-instance.com/saml/meta`

Identitetsudbyderen skal konfigureres til at genkende Overleaf-serveren som en "Service Provider". Se dokumentationen til din SAML-server for instruktioner om, hvordan du gør dette.

Nedenfor er et eksempel på passende 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>

Bemærk certifikaterne, `AssertionConsumerService.Location`, `SingleLogoutService.Location` og `EntityDescriptor.entityID` og angiv dem passende i din IdP-konfiguration, eller send metadatafilen til IdP-administratoren.

<details>

<summary><strong>Eksempel 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

# Aktiverer generering af miniaturebilleder med ImageMagick
ENABLE_CONVERSIONS=true

# Deaktiverer kravet om e-mailbekræftelse
EMAIL_CONFIRMATION_DISABLED=true

## Nginx
# NGINX_WORKER_PROCESSES=4
# NGINX_WORKER_CONNECTIONS=768

## Sæt for TLS via nginx-proxy
# OVERLEAF_BEHIND_PROXY=true
# OVERLEAF_SECURE_COOKIE=true

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

OVERLEAF_LEFT_FOOTER=[{"text": "Kontakt dit supportteam", "url": "mailto:support@example.com"}]
OVERLEAF_RIGHT_FOOTER=[{"text":"Hej, jeg er i højre side", "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=Dette system drives af afdeling x

OVERLEAF_PROXY_LEARN=true
NAV_HIDE_POWERED_BY=true

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

EXTERNAL_AUTH=saml
OVERLEAF_SAML_ISSUER=MyOverleaf
OVERLEAF_SAML_IDENTITY_SERVICE_NAME='Log ind med SAML-udbyder'
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/da/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.
