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

# SAML-authenticatie

Deze functie is ontwikkeld door [yu-i-i/overleaf-cep](https://github.com/yu-i-i/overleaf-cep). Hier bieden we enkele documenten voor uw configuratie aan.

### Configuratie

Intern gebruikt de Overleaf-SAML-module de [passport-saml](https://github.com/node-saml/passport-saml) bibliotheek, de meeste van de volgende configuratieopties worden doorgestuurd naar `passport-saml`. Als je problemen hebt met het configureren van SAML, is het de moeite waard om de README te lezen voor `passport-saml` te lezen om een idee te krijgen van de configuratie die het verwacht.

De omgevingsvariabele `EXTERNAL_AUTH` is vereist om de SAML-authenticatiemodule in te schakelen. Deze omgevingsvariabele bepaalt welke externe authenticatiemethoden zijn geactiveerd. De waarde van deze variabele is een lijst. Als de lijst bevat `saml` dan wordt SAML-authenticatie geactiveerd.

Bijvoorbeeld: `EXTERNAL_AUTH=ldap saml`

Wanneer de SAML-authenticatiemethode wordt gebruikt, wordt een gebruiker doorgestuurd naar de authenticatiesite van de Identity Provider (IdP). Als de IdP de gebruiker succesvol verifieert, wordt in de Overleaf-gebruikersdatabase gezocht naar een record met een `samlIdentifiers` veld met de volgende structuur:

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

De `externalUserId` moet overeenkomen met de waarde van de eigenschap gespecificeerd door `userIdAttribute` in het gebruikersprofiel dat door de IdP-server wordt geretourneerd.

Als er geen overeenkomend record wordt gevonden, wordt in de database gezocht naar een gebruiker met het primaire e-mailadres dat overeenkomt met het e-mailadres in het gebruikersprofiel van de IdP:

* Als zo'n gebruiker wordt gevonden, wordt het `hashedPassword` veld wordt verwijderd om lokale authenticatie uit te schakelen, en het `samlIdentifiers` veld wordt toegevoegd.
* Als geen overeenkomende gebruiker wordt gevonden, wordt een nieuwe gebruiker gemaakt met het e-mailadres en `samlIdentifiers` uit het IdP-profiel.

**Opmerking:** Momenteel wordt slechts één SAML-IdP ondersteund. De `providerId` veld in `samlIdentifiers` is vast ingesteld op `'1'`.

#### Omgevingsvariabelen

* `OVERLEAF_SAML_IDENTITY_SERVICE_NAME`
  * Weergavenaam voor de identiteitsservice, gebruikt op de inlogpagina (standaard: `Inloggen met SAML-IdP`).
* `OVERLEAF_SAML_USER_ID_FIELD`
  * De waarde van dit attribuut wordt door Overleaf gebruikt als de externe gebruikers-ID, standaard: `nameID`.
* `OVERLEAF_SAML_EMAIL_FIELD`
  * Naam van het e-mailveld in het gebruikersprofiel, standaard `nameID`.
* `OVERLEAF_SAML_FIRST_NAME_FIELD`
  * Naam van het firstName-veld in het gebruikersprofiel, standaard `givenName`.
* `OVERLEAF_SAML_LAST_NAME_FIELD`
  * Naam van het lastName-veld in het gebruikersprofiel, standaard `lastName`
* `OVERLEAF_SAML_UPDATE_USER_DETAILS_ON_LOGIN`
  * Als ingesteld op `true`, werkt de gebruiker bij `first_name` en `last_name` veld bij het inloggen, en schakel het formulier voor gebruikersgegevens uit op `/user/settings` pagina.
* `OVERLEAF_SAML_ENTRYPOINT` **(vereist)**
  * URL van het toegangspunt voor de SAML-identityservice.
    * Voorbeeld: `https://idp.example.com/simplesaml/saml2/idp/SSOService.php`
    * Azure-voorbeeld: `https://login.microsoftonline.com/8b26b46a-6dd3-45c7-a104-f883f4db1f6b/saml2`
* `OVERLEAF_SAML_ISSUER` **(vereist)**
  * De naam van de uitgever.
* `OVERLEAF_SAML_AUDIENCE`
  * Verwachte Audience van de SAML-respons, standaard de waarde van `OVERLEAF_SAML_ISSUER`.
* `OVERLEAF_SAML_IDP_CERT` **(vereist)**
  * Pad naar een bestand met het openbare certificaat van de Identity Provider, gebruikt om de handtekeningen van binnenkomende SAML-responsen te valideren. Als de Identity Provider meerdere geldige ondertekeningcertificaten heeft, kan dit een JSON-array van paden naar de certificaten zijn.
    * Voorbeeld (één certificaat): `/var/lib/overleaf/certs/idp_cert.pem`
    * Voorbeeld (meerdere certificaten): `["var/lib/overleaf/certs/idp_cert.pem", "/var/lib/overleaf/certs/idp_cert_old.pem"]`
* `OVERLEAF_SAML_PUBLIC_CERT`
  * Pad naar een bestand met het openbare ondertekeningcertificaat dat wordt ingebed in authenticatieverzoeken zodat de IdP de handtekeningen van het binnenkomende SAML-verzoek kan valideren. Het is vereist bij het instellen van de [metadata-eindpunt](https://github.com/yu-i-i/overleaf-cep/wiki/Extended-CE:-SAML-Authentication#metadata-for-the-identity-provider) wanneer de strategie is geconfigureerd met een `OVERLEAF_SAML_PRIVATE_KEY`. Een JSON-array van paden naar certificaten kan worden opgegeven om certificaatrotatie te ondersteunen. Wanneer je een array met certificaten opgeeft, moet het eerste item in de array overeenkomen met het huidige `OVERLEAF_SAML_PRIVATE_KEY`. Extra items in de array kunnen worden gebruikt om aankomende certificaten aan IdP's te publiceren voordat je de `OVERLEAF_SAML_PRIVATE_KEY`.
* `OVERLEAF_SAML_PRIVATE_KEY`
  * Pad naar een bestand met een PEM-opgemaakte privésleutel die overeenkomt met de `OVERLEAF_SAML_PUBLIC_CERT` gebruikt om authenticatieverzoeken te ondertekenen die door passport-saml worden verzonden.
* `OVERLEAF_SAML_DECRYPTION_CERT`
  * Pad naar een bestand met een openbaar certificaat, gebruikt voor de [metadata-eindpunt](https://github.com/yu-i-i/overleaf-cep/wiki/Extended-CE:-SAML-Authentication#metadata-for-the-identity-provider).
* `OVERLEAF_SAML_DECRYPTION_PVK`
  * Pad naar een bestand met een privésleutel die overeenkomt met de `OVERLEAF_SAML_DECRYPTION_CERT` dat zal worden gebruikt om te proberen alle ontvangen versleutelde assertions te ontsleutelen.
* `OVERLEAF_SAML_SIGNATURE_ALGORITHM`
  * Optioneel het handtekeningalgoritme instellen voor het ondertekenen van verzoeken; geldige waarden zijn 'sha1' (standaard), 'sha256' (bij voorkeur), 'sha512' (meest veilig, controleer of je IdP dit ondersteunt).
* `OVERLEAF_SAML_ADDITIONAL_PARAMS`
  * JSON-woordenboek met extra queryparameters die aan alle verzoeken moeten worden toegevoegd.
* `OVERLEAF_SAML_ADDITIONAL_AUTHORIZE_PARAMS`
  * JSON-woordenboek met extra queryparameters die aan 'authorize'-verzoeken moeten worden toegevoegd.
    * Voorbeeld: `{"some_key": "some_value"}`
* `OVERLEAF_SAML_IDENTIFIER_FORMAT`
  * Naam-id-indeling om op te vragen bij de identity provider (standaard: `urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress`). Als je gebruikmaakt van `urn:oasis:names:tc:SAML:2.0:nameid-format:persistent`, zorg ervoor dat de `OVERLEAF_SAML_EMAIL_FIELD` omgevingsvariabele is gedefinieerd. Als `urn:oasis:names:tc:SAML:2.0:nameid-format:transient` vereist is, moet je ook de `OVERLEAF_SAML_ID_FIELD` omgevingsvariabele definiëren, die bijvoorbeeld kan worden ingesteld op het e-mailadres van de gebruiker.
* `OVERLEAF_SAML_ACCEPTED_CLOCK_SKEW_MS`
  * Tijd in milliseconden van de afwijking die acceptabel is tussen client en server bij het controleren van de geldigheidstijdstempels van de OnBefore- en NotOnOrAfter-assertievoorwaarden. Instellen op -1 schakelt het controleren van deze voorwaarden volledig uit. Standaard is 0.
* `OVERLEAF_SAML_ATTRIBUTE_CONSUMING_SERVICE_INDEX`
  * `AttributeConsumingServiceIndex` attribuut om toe te voegen aan AuthnRequest om de IdP te instrueren welke attribuutset aan de respons moet worden toegevoegd ([link](http://blog.aniljohn.com/2014/01/data-minimization-front-channel-saml-attribute-requests.html)).
* `OVERLEAF_SAML_AUTHN_CONTEXT`
  * JSON-array met waarden voor naam-id-indeling om auth-context op te vragen. Standaard: `["urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport"]`.
* `OVERLEAF_SAML_FORCE_AUTHN`
  * Als `true`, geeft het eerste SAML-verzoek van de serviceprovider aan dat de IdP de gebruiker opnieuw moet laten authenticeren, zelfs als deze een geldige sessie heeft.
* `OVERLEAF_SAML_DISABLE_REQUESTED_AUTHN_CONTEXT`
  * Als `true`, vraag geen specifieke auth-context op. Je kunt dit bijvoorbeeld instellen op `true` om extra contexten toe te staan, zoals wachtwoordloze logins (`urn:oasis:names:tc:SAML:2.0:ac:classes:X509`). Ondersteuning voor extra contexten is afhankelijk van je IdP.
* `OVERLEAF_SAML_AUTHN_REQUEST_BINDING`
  * Als ingesteld op `HTTP-POST`, zal authenticatie bij de IdP aanvragen via HTTP-POST-binding, anders is de standaard HTTP-Redirect.
* `OVERLEAF_SAML_VALIDATE_IN_RESPONSE_TO`
  * Als `always`, dan wordt InResponseTo gevalideerd op basis van inkomende SAML-responsen.
  * Als `never`, dan wordt InResponseTo niet gevalideerd (standaard).
  * Als `ifPresent`, dan wordt InResponseTo alleen gevalideerd als het aanwezig is in de inkomende SAML-respons.
* `OVERLEAF_SAML_WANT_ASSERTIONS_SIGNED` en `OVERLEAF_SAML_WANT_AUTHN_RESPONSE_SIGNED`
  * Wanneer ingesteld op `true` (standaard) verwacht Overleaf dat de SAML-assertions, respectievelijk de gehele SAML-authenticatierespons, door de IdP zijn ondertekend. Wanneer beide opties zijn `false`, moet ten minste één van de assertions of de respons zijn ondertekend.
* `OVERLEAF_SAML_REQUEST_ID_EXPIRATION_PERIOD_MS`
  * Bepaalt de vervaltijd waarna een Request ID die voor een SAML-verzoek is gegenereerd, niet geldig is als deze wordt gezien in een SAML-respons in het `InResponseTo` veld. Standaard: 28800000 (8 uur).
* `OVERLEAF_SAML_LOGOUT_URL`
  * basisadres dat wordt aangeroepen met uitlogverzoeken (standaard: `entryPoint`).
    * Voorbeeld: `https://idp.example.com/simplesaml/saml2/idp/SingleLogoutService.php`
* `OVERLEAF_SAML_ADDITIONAL_LOGOUT_PARAMS`
  * JSON-woordenboek met extra queryparameters die aan 'logout'-verzoeken moeten worden toegevoegd.
* `OVERLEAF_SAML_IS_ADMIN_FIELD` en `OVERLEAF_SAML_IS_ADMIN_FIELD_VALUE`
  * Wanneer beide omgevingsvariabelen zijn ingesteld, werkt het inlogproces `user.isAdmin = true` als het profiel dat door de SAML-IdP wordt geretourneerd het attribuut bevat dat is opgegeven door `OVERLEAF_SAML_IS_ADMIN_FIELD` en de waarde ervan ofwel overeenkomt met `OVERLEAF_SAML_IS_ADMIN_FIELD_VALUE` of een array bevat `OVERLEAF_SAML_IS_ADMIN_FIELD_VALUE`, anders `user.isAdmin` wordt ingesteld op `false`. Als een van deze variabelen niet is ingesteld, wordt de beheerdersstatus alleen ingesteld op `true` tijdens het aanmaken van een beheerdersgebruiker in Launchpad.

**Metadata voor de Identity Provider**

De huidige versie van Overleaf CE bevat een eindpunt om Service Provider-metadata op te halen: `http://my-overleaf-instance.com/saml/meta`

De Identity Provider moet zo worden geconfigureerd dat deze de Overleaf-server herkent als een "Service Provider". Raadpleeg de documentatie van je SAML-server voor instructies hierover.

Hieronder staat een voorbeeld van geschikte 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>

Let op de certificaten, `AssertionConsumerService.Location`, `SingleLogoutService.Location` en `EntityDescriptor.entityID` en stel deze dienovereenkomstig in in je IdP-configuratie, of stuur het metadatabestand naar de beheerder van de IdP.

<details>

<summary><strong>Voorbeeld van variables.env-bestand (minimaal)</strong></summary>

<pre><code>OVERLEAF_APP_NAME="Onze Overleaf-instantie"

ENABLED_LINKED_FILE_TYPES=project_file,project_output_file,url

# Schakelt het genereren van miniaturen in met ImageMagick
ENABLE_CONVERSIONS=true

# Schakelt de vereiste voor e-mailbevestiging uit
EMAIL_CONFIRMATION_DISABLED=true

## Nginx
# NGINX_WORKER_PROCESSES=4
# NGINX_WORKER_CONNECTIONS=768

## Instellen voor TLS via nginx-proxy
# OVERLEAF_BEHIND_PROXY=true
# OVERLEAF_SECURE_COOKIE=true

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

OVERLEAF_LEFT_FOOTER=[{"text": "Neem contact op met uw supportteam", "url": "mailto:support@example.com"}]
OVERLEAF_RIGHT_FOOTER=[{"text":"Hallo, ik ben aan de rechterkant", "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=Dit systeem wordt beheerd door afdeling x

OVERLEAF_PROXY_LEARN=true
NAV_HIDE_POWERED_BY=true

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

EXTERNAL_AUTH=saml
OVERLEAF_SAML_ISSUER=MyOverleaf
OVERLEAF_SAML_IDENTITY_SERVICE_NAME='Inloggen met SAML-provider'
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/nl/configuratie/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.
