> 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/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, og de fleste av følgende konfigurasjonsalternativer sendes videre til `passport-saml`. Hvis du har problemer med å konfigurere SAML, er det verdt å lese README-en for `passport-saml` for å få en følelse av hvilken konfigurasjon den forventer.

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

For eksempel: `EXTERNAL_AUTH=ldap saml`

Når SAML-autentiseringsmetoden brukes, blir en bruker omdirigert til autentiseringsstedet til Identity Provider (IdP). Hvis IdP autentiserer brukeren vellykket, blir Overleafs brukerdatabase sjekket for en post som inneholder en `samlIdentifiers` felt strukturert som følger:

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

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

Hvis ingen samsvarende post finnes, blir databasen søkt etter en bruker med den primære e-postadressen som samsvarer med e-posten i IdP-brukerprofilen:

* Hvis en slik bruker finnes, blir `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. Feltet `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, standardverdi `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 `fornavn` og `etternavn` felt ved innlogging, og slå av skjemaet for brukeropplysninger på `/user/settings` siden.
* `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 Identity Providers offentlige sertifikat, brukt til å validere signaturene i innkommende SAML-svar. Hvis Identity Provider har flere gyldige signeringssertifikater, kan det være en JSON-matrise av 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 til den innkommende SAML-forespørselen. Det kreves når du setter opp [metadataendepunktet](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-matrise av stier til sertifikater kan oppgis for å støtte sertifikatrotasjon. Når du oppgir en matrise med sertifikater, bør den første oppføringen i matrisen samsvare med det gjeldende `OVERLEAF_SAML_PRIVATE_KEY`. Ytterligere oppføringer i matrisen 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 offentlig sertifikat, brukt for [metadataendepunktet](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 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`
  * Valgfritt sett 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ørringsparametere som skal legges til alle forespørsler.
* `OVERLEAF_SAML_ADDITIONAL_AUTHORIZE_PARAMS`
  * JSON-ordbok med ekstra spørringsparametere som skal legges til 'authorize'-forespørsler.
    * Eksempel: `{"some_key": "some_value"}`
* `OVERLEAF_SAML_IDENTIFIER_FORMAT`
  * Navneidentifikatorformat 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 påkrevd, 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 gyldighetstidspunktene for påstandsforholdene OnBefore og NotOnOrAfter kontrolleres. Hvis den settes til -1, deaktiveres kontroll av disse forholdene helt. Standard er 0.
* `OVERLEAF_SAML_ATTRIBUTE_CONSUMING_SERVICE_INDEX`
  * `AttributeConsumingServiceIndex` attributt som skal legges til AuthnRequest for å instruere IdP 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-matrise av navneidentifikatorformatverdier for å be om autentiseringskontekst. Standard: `["urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport"]`.
* `OVERLEAF_SAML_FORCE_AUTHN`
  * Hvis `true`, vil den innledende SAML-forespørselen fra tjenesteleverandøren angi at IdP-en skal tvinge brukeren til å autentisere seg på nytt, selv om de har en gyldig sesjon.
* `OVERLEAF_SAML_DISABLE_REQUESTED_AUTHN_CONTEXT`
  * Hvis `true`, be om ingen 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 avhenger 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 fra innkommende SAML-svar.
  * Hvis `aldri`, vil InResponseTo ikke bli validert (standard).
  * Hvis `ifPresent`, vil InResponseTo bare bli validert hvis den er til stede 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 for når 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 brukes for utloggingsforespørsler (standard: `entryPoint`).
    * Eksempel: `https://idp.example.com/simplesaml/saml2/idp/SingleLogoutService.php`
* `OVERLEAF_SAML_ADDITIONAL_LOGOUT_PARAMS`
  * JSON-ordbok med ekstra spørringsparametere 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 inneholder attributtet som er angitt 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` settes til `false`. Hvis en av disse variablene ikke er satt, settes administratortilstanden bare til `true` under opprettelse av administratorbruker i Launchpad.

**Metadata for identitetsleverandøren**

Gjeldende versjon av Overleaf CE inkluderer et endepunkt for å hente metadata for tjenesteleverandøren: `http://my-overleaf-instance.com/saml/meta`

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

Nedenfor er et eksempel på passende metadata for tjenesteleverandø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>

Merk sertifikatene, `AssertionConsumerService.Location`, `SingleLogoutService.Location` og `EntityDescriptor.entityID` og sett 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 ved hjelp av 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=Vår Overleaf-instans
# 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=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://overleaf-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.
