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

# SAML-godkendelse

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, og 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-filen 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å aktiveres SAML-autentificering.

For eksempel: `EXTERNAL_AUTH=ldap saml`

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

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

Den `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, søges der i databasen efter en bruger med den primære e-mailadresse, der matcher e-mailen i IdP-brugerprofilen:

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

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

#### Miljøvariabler

* `OVERLEAF_SAML_IDENTITY_SERVICE_NAME`
  * Visningsnavn for identitetstjenesten, bruges på login-siden (standard: `Log ind med SAML IdP`).
* `OVERLEAF_SAML_USER_ID_FIELD`
  * Værdien af denne attribut vil blive brugt af Overleaf som det eksterne bruger-id, standard er `nameID`.
* `OVERLEAF_SAML_EMAIL_FIELD`
  * Navn på feltet E-mail i brugerprofilen, standard er `nameID`.
* `OVERLEAF_SAML_FIRST_NAME_FIELD`
  * Navn på feltet firstName i brugerprofilen, standard er `givenName`.
* `OVERLEAF_SAML_LAST_NAME_FIELD`
  * Navn på feltet lastName i brugerprofilen, standard er `lastName`
* `OVERLEAF_SAML_UPDATE_USER_DETAILS_ON_LOGIN`
  * Hvis sat til `true`, opdaterer brugerens `first_name` og `last_name` felt ved login, og slå formularen med brugeroplysninger fra ved `/user/settings` siden.
* `OVERLEAF_SAML_ENTRYPOINT` **(påkrævet)**
  * Indgangspunkt-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)**
  * Udstederens navn.
* `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 Identity Providerens offentlige certifikat, som bruges til at validere signaturerne i indkommende SAML-svar. Hvis Identity Provider 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 indlejres i autentificeringsanmodninger, så IdP'en kan validere signaturerne i den indkommende SAML-anmodning. Det er påkrævet, når man sætter [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`. Et JSON-array af stier til certifikater kan angives for at understøtte certifikatrotation. Når man angiver 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, som matcher `OVERLEAF_SAML_PUBLIC_CERT` og bruges til at signere autentificeringsanmodninger sendt af passport-saml.
* `OVERLEAF_SAML_DECRYPTION_CERT`
  * Sti til en fil, der indeholder et offentligt 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 en privat nøgle, der matcher `OVERLEAF_SAML_DECRYPTION_CERT` som vil blive brugt til at forsøge at dekryptere eventuelle modtagne krypterede assertions.
* `OVERLEAF_SAML_SIGNATURE_ALGORITHM`
  * Valgfrit kan signaturalgoritmen til signering af anmodninger angives; gyldige værdier er 'sha1' (standard), 'sha256' (foretrukket), 'sha512' (mest sikker; tjek om din IdP understøtter den).
* `OVERLEAF_SAML_ADDITIONAL_PARAMS`
  * JSON-ordbog med ekstra forespørgselsparametre, der skal tilføjes til alle anmodninger.
* `OVERLEAF_SAML_ADDITIONAL_AUTHORIZE_PARAMS`
  * JSON-ordbog med ekstra forespørgselsparametre, der skal tilføjes til 'authorize'-anmodninger.
    * Eksempel: `{"some_key": "some_value"}`
* `OVERLEAF_SAML_IDENTIFIER_FORMAT`
  * Navneidentifikator-format, 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`, sørg 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`
  * Tidsforskydning i millisekunder, som er acceptabel mellem klient og server, når gyldigheden af tidsstemplerne i betingelserne OnBefore og NotOnOrAfter kontrolleres. Sættes til -1, deaktiveres kontrollen af disse betingelser helt. Standard er 0.
* `OVERLEAF_SAML_ATTRIBUTE_CONSUMING_SERVICE_INDEX`
  * `AttributeConsumingServiceIndex` attribut, der skal tilføjes til AuthnRequest for at instruere IdP'en om, hvilket attributsæt der skal vedhæftes til svaret ([link](http://blog.aniljohn.com/2014/01/data-minimization-front-channel-saml-attribute-requests.html)).
* `OVERLEAF_SAML_AUTHN_CONTEXT`
  * JSON-array af værdier for navneidentifikatorformat, der skal anmodes om som autentificeringskontekst. Standard: `["urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport"]`.
* `OVERLEAF_SAML_FORCE_AUTHN`
  * Hvis `true`, angiver den indledende SAML-anmodning 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 specifik autentificeringskontekst. For eksempel kan du sætte dette til `true` for at tillade yderligere kontekster såsom adgangskodefri login (`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 `always`, valideres InResponseTo fra indkommende SAML-svar.
  * Hvis `aldrig`, valideres InResponseTo ikke (standard).
  * Hvis `ifPresent`, valideres InResponseTo kun, hvis det er til stede i det indkommende SAML-svar.
* `OVERLEAF_SAML_WANT_ASSERTIONS_SIGNED` og `OVERLEAF_SAML_WANT_AUTHN_RESPONSE_SIGNED`
  * Når den er sat til `true` (standard) forventer Overleaf, at SAML-Assertions, henholdsvis hele SAML-autentificeringssvaret, er signeret af IdP'en. Når begge indstillinger er `false`, skal mindst én af assertions eller svaret være signeret.
* `OVERLEAF_SAML_REQUEST_ID_EXPIRATION_PERIOD_MS`
  * Definerer udløbstiden, hvor en Request ID genereret til en SAML-anmodning ikke vil være gyldig, hvis den ses i et SAML-svar i `InResponseTo` feltet. Standard: 28800000 (8 timer).
* `OVERLEAF_SAML_LOGOUT_URL`
  * basisadresse, der kaldes med logout-anmodninger (standard: `entryPoint`).
    * Eksempel: `https://idp.example.com/simplesaml/saml2/idp/SingleLogoutService.php`
* `OVERLEAF_SAML_ADDITIONAL_LOGOUT_PARAMS`
  * JSON-ordbog med ekstra forespørgselsparametre, der skal tilføjes til 'logout'-anmodninger.
* `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 attributten angivet af `OVERLEAF_SAML_IS_ADMIN_FIELD` og dens værdi enten matcher `OVERLEAF_SAML_IS_ADMIN_FIELD_VALUE` eller er et array, der indeholder `OVERLEAF_SAML_IS_ADMIN_FIELD_VALUE`, ellers `user.isAdmin` sættes til `false`. Hvis en af disse variabler ikke er angivet, sættes administratorstatus kun til `true` under oprettelsen af adminbrugeren i Launchpad.

**Metadata for identitetsudbyderen**

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

Identity Provideren skal konfigureres til at genkende Overleaf-serveren som en "Service Provider". Se dokumentationen til din SAML-server for instruktioner i, hvordan dette gøres.

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 efter behov 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="Vores Overleaf-instans"

ENABLED_LINKED_FILE_TYPES=project_file,project_output_file,url

# Aktiverer generering af miniaturebilleder ved hjælp af ImageMagick
ENABLE_CONVERSIONS=true

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

## Nginx
# NGINX_WORKER_PROCESSES=4
# NGINX_WORKER_CONNECTIONS=768

## Angiv for 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": "Kontakt dit supportteam", "url": "mailto:support@example.com"}]
OVERLEAF_RIGHT_FOOTER=[{"text":"Hej, jeg er til højre", "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=E-mail
OVERLEAF_SAML_FIRST_NAME_FIELD=Visningsnavn
OVERLEAF_SAML_LAST_NAME_FIELD=Visningsnavn
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/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.
