> 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/on-premises-no/konfigurasjon/overleaf-toolkit/authentication/saml-authentication.md).

# SAML-autentisering

Denne funksjonen er utviklet av [yu-i-i/overleaf-cep](https://github.com/yu-i-i/overleaf-cep). Her tilbyr vi noen dokumenter for konfigurasjonen din.

### Konfigurasjon

Internt bruker Overleafs SAML-modul [passport-saml](https://github.com/node-saml/passport-saml) biblioteket, de fleste av følgende konfigurasjonsalternativene sendes videre til `passport-saml`. Hvis du har problemer med å konfigurere SAML, kan det være verdt å lese README-filen for `passport-saml` for å få en følelse av konfigurasjonen den forventer.

Miljøvariabelen `EXTERNAL_AUTH` er nødvendig for å aktivere SAML-autentiseringsmodulen. Denne miljøvariabelen spesifiserer hvilke eksterne autentiseringsmetoder som er aktivert. Verdien av denne variabelen er en liste. Hvis listen inkluderer `saml` vil SAML-autentisering bli aktivert.

For eksempel: `EXTERNAL_AUTH=ldap saml`

Når du bruker SAML-autentiseringsmetoden, blir en bruker omdirigert til autentiseringssiden til identitetsleverandøren (IdP). Hvis IdP autentiserer brukeren vellykket, blir Overleafs brukerdatabase sjekket for en oppføring som inneholder en `samlIdentifiers` felt strukturert slik:

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

Den `externalUserId` må samsvare med verdien av egenskapen spesifisert av `userIdAttribute` i brukerprofilen som returneres av IdP-serveren.

Hvis ingen samsvarende oppføring blir funnet, søkes databasen etter en bruker med den primære e-postadressen som samsvarer med e-posten i IdP-brukerprofilen:

* Hvis en slik bruker blir funnet, `hashedPassword` feltet slettes for å deaktivere lokal autentisering, og `samlIdentifiers` feltet legges til.
* Hvis ingen samsvarende bruker blir funnet, opprettes en ny bruker med e-postadressen og `samlIdentifiers` fra IdP-profilen.

**Merk:** For øyeblikket støttes bare én SAML IdP.  `providerId` feltet i `samlIdentifiers` er satt til `'1'`.

#### Miljøvariabler

* `OVERLEAF_SAML_IDENTITY_SERVICE_NAME`
  * Visningsnavn for identitetstjenesten, brukt på innloggingssiden (standard: `Logg inn med SAML IdP`).
* `OVERLEAF_SAML_USER_ID_FIELD`
  * Verdien av denne attributten vil bli brukt av Overleaf som den eksterne bruker-ID-en, standard er `nameID`.
* `OVERLEAF_SAML_EMAIL_FIELD`
  * Navnet på e-postfeltet i brukerprofilen, standard er `nameID`.
* `OVERLEAF_SAML_FIRST_NAME_FIELD`
  * Navnet på firstName-feltet i brukerprofilen, standard er `givenName`.
* `OVERLEAF_SAML_LAST_NAME_FIELD`
  * Navnet på lastName-feltet i brukerprofilen, standard er `lastName`
* `OVERLEAF_SAML_UPDATE_USER_DETAILS_ON_LOGIN`
  * Hvis satt til `true`, oppdaterer brukerens `first_name` og `last_name` feltet ved innlogging, og slå av skjemaet for brukeropplysninger på `/user/settings` .
* `OVERLEAF_SAML_ENTRYPOINT` **(påkrevd)**
  * Inngangspunkt-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åkrevd)**
  * Utstederens navn.
* `OVERLEAF_SAML_AUDIENCE`
  * Forventet Audience i SAML-svaret, standard er verdien av `OVERLEAF_SAML_ISSUER`.
* `OVERLEAF_SAML_IDP_CERT` **(påkrevd)**
  * Sti til en fil som inneholder identitetsleverandørens offentlige sertifikat, brukt til å validere signaturene i innkommende SAML-svar. Hvis identitetsleverandøren har flere gyldige signeringssertifikater, kan dette være en JSON-array med stier til sertifikatene.
    * Eksempel (ett sertifikat): `/var/lib/overleaf/certs/idp_cert.pem`
    * Eksempel (flere sertifikater): `["var/lib/overleaf/certs/idp_cert.pem", "/var/lib/overleaf/certs/idp_cert_old.pem"]`
* `OVERLEAF_SAML_PUBLIC_CERT`
  * Sti til en fil som inneholder det offentlige signeringssertifikatet som brukes til å bygge inn i autentiseringsforespørsler, slik at IdP kan validere signaturene i den innkommende SAML-forespørselen. Det kreves når du setter opp [metadata-endepunktet](https://github.com/yu-i-i/overleaf-cep/wiki/Extended-CE:-SAML-Authentication#metadata-for-the-identity-provider) når strategien er konfigurert med en `OVERLEAF_SAML_PRIVATE_KEY`. En JSON-array med stier til sertifikater kan oppgis for å støtte sertifikatrotasjon. Når du oppgir en rekke sertifikater, bør den første oppføringen i arrayen samsvare med den gjeldende `OVERLEAF_SAML_PRIVATE_KEY`. Ytterligere oppføringer i arrayen kan brukes til å publisere kommende sertifikater til IdP-er før du endrer `OVERLEAF_SAML_PRIVATE_KEY`.
* `OVERLEAF_SAML_PRIVATE_KEY`
  * Sti til en fil som inneholder en PEM-formatert privat nøkkel som samsvarer med `OVERLEAF_SAML_PUBLIC_CERT` som brukes til å signere autentiseringsforespørsler sendt av passport-saml.
* `OVERLEAF_SAML_DECRYPTION_CERT`
  * Sti til en fil som inneholder et offentlig sertifikat, brukt 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 som inneholder en privat nøkkel som samsvarer med `OVERLEAF_SAML_DECRYPTION_CERT` som vil bli brukt til å forsøke å dekryptere eventuelle krypterte påstander som mottas.
* `OVERLEAF_SAML_SIGNATURE_ALGORITHM`
  * Angi eventuelt signaturalgoritmen for signering av forespørsler; gyldige verdier er 'sha1' (standard), 'sha256' (foretrukket), 'sha512' (mest sikkert, sjekk om IdP-en din støtter det).
* `OVERLEAF_SAML_ADDITIONAL_PARAMS`
  * JSON-ordbok med ekstra spørreparametere som skal legges til alle forespørsler.
* `OVERLEAF_SAML_ADDITIONAL_AUTHORIZE_PARAMS`
  * JSON-ordbok med ekstra spørreparametere som skal legges til 'authorize'-forespørsler.
    * Eksempel: `{"some_key": "some_value"}`
* `OVERLEAF_SAML_IDENTIFIER_FORMAT`
  * Format for navneidentifikator som skal forespørres fra identitetsleverandøren (standard: `urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress`). Hvis du bruker `urn:oasis:names:tc:SAML:2.0:nameid-format:persistent`, sørg for at `OVERLEAF_SAML_EMAIL_FIELD` miljøvariabelen er definert. Hvis `urn:oasis:names:tc:SAML:2.0:nameid-format:transient` er nødvendig, må du også definere `OVERLEAF_SAML_ID_FIELD` miljøvariabelen, som for eksempel kan settes til brukerens e-postadresse.
* `OVERLEAF_SAML_ACCEPTED_CLOCK_SKEW_MS`
  * Tidsavvik i millisekunder som er akseptabelt mellom klient og server når gyldighetsstemplene for påstandsforholdene OnBefore og NotOnOrAfter kontrolleres. Setter du dette til -1, deaktiveres kontrollen av disse betingelsene helt. Standard er 0.
* `OVERLEAF_SAML_ATTRIBUTE_CONSUMING_SERVICE_INDEX`
  * `AttributeConsumingServiceIndex` attributt som skal legges til AuthnRequest for å instruere IdP-en om hvilket attributtsett som skal legges ved svaret ([lenke](http://blog.aniljohn.com/2014/01/data-minimization-front-channel-saml-attribute-requests.html)).
* `OVERLEAF_SAML_AUTHN_CONTEXT`
  * JSON-array med verdier for navneidentifikatorformat som skal be om autentiseringskontekst. Standard: `["urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport"]`.
* `OVERLEAF_SAML_FORCE_AUTHN`
  * Hvis `true`, spesifiserer den innledende SAML-forespørselen fra tjenesteleverandøren at IdP-en skal tvinge frem ny autentisering av brukeren, selv om de har en gyldig sesjon.
* `OVERLEAF_SAML_DISABLE_REQUESTED_AUTHN_CONTEXT`
  * Hvis `true`, ikke be om en spesifikk autentiseringskontekst. For eksempel kan du sette dette til `true` for å tillate ytterligere kontekster som passordløse innlogginger (`urn:oasis:names:tc:SAML:2.0:ac:classes:X509`). Støtte for ytterligere kontekster er avhengig av IdP-en din.
* `OVERLEAF_SAML_AUTHN_REQUEST_BINDING`
  * Hvis satt til `HTTP-POST`, vil be om autentisering fra IdP via HTTP POST-binding, ellers er standard HTTP-Redirect.
* `OVERLEAF_SAML_VALIDATE_IN_RESPONSE_TO`
  * Hvis `always`, vil InResponseTo bli validert i innkommende SAML-svar.
  * Hvis `aldri`, vil InResponseTo ikke bli validert (standard).
  * Hvis `ifPresent`, vil InResponseTo bare bli validert hvis den finnes i det innkommende SAML-svaret.
* `OVERLEAF_SAML_WANT_ASSERTIONS_SIGNED` og `OVERLEAF_SAML_WANT_AUTHN_RESPONSE_SIGNED`
  * Når satt til `true` (standard), forventer Overleaf at SAML-påstandene, henholdsvis hele SAML-autentiseringssvaret, er signert av IdP-en. Når begge alternativene er `false`, må minst én av påstandene eller svaret være signert.
* `OVERLEAF_SAML_REQUEST_ID_EXPIRATION_PERIOD_MS`
  * Definerer utløpstiden der en forespørsels-ID generert for en SAML-forespørsel ikke vil være gyldig hvis den sees i et SAML-svar i `InResponseTo` feltet. Standard: 28800000 (8 timer).
* `OVERLEAF_SAML_LOGOUT_URL`
  * basisadresse som skal brukes ved utloggingsforespørsler (standard: `entryPoint`).
    * Eksempel: `https://idp.example.com/simplesaml/saml2/idp/SingleLogoutService.php`
* `OVERLEAF_SAML_ADDITIONAL_LOGOUT_PARAMS`
  * JSON-ordbok med ekstra spørreparametere som skal legges til 'logout'-forespørsler.
* `OVERLEAF_SAML_IS_ADMIN_FIELD` og `OVERLEAF_SAML_IS_ADMIN_FIELD_VALUE`
  * Når begge miljøvariablene er satt, oppdaterer innloggingsprosessen `user.isAdmin = true` hvis profilen som returneres av SAML IdP-en inneholder attributtet spesifisert av `OVERLEAF_SAML_IS_ADMIN_FIELD` og verdien enten samsvarer med `OVERLEAF_SAML_IS_ADMIN_FIELD_VALUE` eller er en array som inneholder `OVERLEAF_SAML_IS_ADMIN_FIELD_VALUE`, ellers `user.isAdmin` er satt til `false`. Hvis en av disse variablene ikke er satt, settes administratorstatusen bare til `true` under opprettelse av adminbruker i Launchpad.

**Metadata for identitetsleverandøren**

Den nåværende versjonen av Overleaf CE inkluderer et endepunkt for å hente tjenesteleverandørmetadata: `http://my-overleaf-instance.com/saml/meta`

Identitetsleverandøren må konfigureres til å gjenkjenne Overleaf-serveren som en "tjenesteleverandør". Se dokumentasjonen for SAML-serveren din for instruksjoner om hvordan dette gjøres.

Nedenfor er et eksempel på passende tjenesteleverandørmetadata:

<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...
[hoppet over]
</ds:X509Certificate>
        </ds:X509Data>
      </ds:KeyInfo>
    </KeyDescriptor>
    <KeyDescriptor use="encryption">
      <ds:KeyInfo>
        <ds:X509Data>
          <ds:X509Certificate>MII...
[hoppet over]
</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>

Legg merke til sertifikatene, `AssertionConsumerService.Location`, `SingleLogoutService.Location` og `EntityDescriptor.entityID` og angi dem passende i IdP-konfigurasjonen din, eller send metadatafilen til IdP-administratoren.

<details>

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

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

ENABLED_LINKED_FILE_TYPES=project_file,project_output_file,url

# Aktiverer generering av miniatyrbilder med ImageMagick
ENABLE_CONVERSIONS=true

# Deaktiverer kravet om e-postbekreftelse
EMAIL_CONFIRMATION_DISABLED=true

## Nginx
# NGINX_WORKER_PROCESSES=4
# NGINX_WORKER_CONNECTIONS=768

## Sett 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 supportteamet ditt", "url": "mailto:support@example.com"}]
OVERLEAF_RIGHT_FOOTER=[{"text":"Hallo, jeg er på høyre 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 systemet drives av avdeling x

OVERLEAF_PROXY_LEARN=true
NAV_HIDE_POWERED_BY=true

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

EXTERNAL_AUTH=saml
OVERLEAF_SAML_ISSUER=MyOverleaf
OVERLEAF_SAML_IDENTITY_SERVICE_NAME='Logg inn med SAML-leverandør'
OVERLEAF_SAML_EMAIL_FIELD=E-post
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/on-premises-no/konfigurasjon/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.
