> 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/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.

### 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 doorgegeven aan `passport-saml`. Als je problemen hebt met het configureren van SAML, is het de moeite waard om de README 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 geeft aan welke externe authenticatiemethoden worden geactiveerd. De waarde van deze variabele is een lijst. Als de lijst bevat `saml` dan wordt SAML-authenticatie geactiveerd.

Bijvoorbeeld: `EXTERNAL_AUTH=ldap saml`

Bij gebruik van de SAML-authenticatiemethode wordt een gebruiker doorgestuurd naar de authenticatiesite van de Identity Provider (IdP). Als de IdP de gebruiker succesvol authenticeert, 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 die is opgegeven 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 aangemaakt met het e-mailadres en `samlIdentifiers` uit het IdP-profiel.

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

#### Omgevingsvariabelen

* `OVERLEAF_SAML_IDENTITY_SERVICE_NAME`
  * Weergavenaam voor de identiteitsdienst, 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 veld Email in het gebruikersprofiel, standaard `nameID`.
* `OVERLEAF_SAML_FIRST_NAME_FIELD`
  * Naam van het veld firstName in het gebruikersprofiel, standaard `givenName`.
* `OVERLEAF_SAML_LAST_NAME_FIELD`
  * Naam van het veld lastName in het gebruikersprofiel, standaard `lastName`
* `OVERLEAF_SAML_UPDATE_USER_DETAILS_ON_LOGIN`
  * Indien ingesteld op `true`werkt het gebruikers `first_name` en `last_name` veld bij inloggen, en schakel het formulier met gebruikersgegevens uit op `/user/settings` pagina.
* `OVERLEAF_SAML_ENTRYPOINT` **(vereist)**
  * Toegangspunt-URL voor de SAML-identiteitsservice.
    * 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)**
  * Naam van de issuer.
* `OVERLEAF_SAML_AUDIENCE`
  * Verwachte Audience van de SAML-reactie, 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 inkomende SAML-reacties te valideren. Als de Identity Provider meerdere geldige ondertekeningscertificaten 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 een openbaar ondertekeningscertificaat dat wordt ingebed in authenticatieverzoeken, zodat de IdP de handtekeningen van het binnenkomende SAML-verzoek kan valideren. Dit 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`. Er kan een JSON-array van paden naar certificaten 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`. Aanvullende items in de array kunnen worden gebruikt om aankomende certificaten aan IdP's te publiceren voordat je het `OVERLEAF_SAML_PRIVATE_KEY`.
* `OVERLEAF_SAML_PRIVATE_KEY`
  * Pad naar een bestand met een in PEM-formaat geformatteerde privésleutel die overeenkomt met de `OVERLEAF_SAML_PUBLIC_CERT` die wordt 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` die zal worden gebruikt om te proberen alle ontvangen versleutelde assertions te ontsleutelen.
* `OVERLEAF_SAML_SIGNATURE_ALGORITHM`
  * Stel optioneel het handtekeningalgoritme in voor het ondertekenen van verzoeken; geldige waarden zijn 'sha1' (standaard), 'sha256' (aanbevolen), 'sha512' (het veiligst, controleer of je IdP dit ondersteunt).
* `OVERLEAF_SAML_ADDITIONAL_PARAMS`
  * JSON-woordenboek met aanvullende queryparameters die aan alle verzoeken moeten worden toegevoegd.
* `OVERLEAF_SAML_ADDITIONAL_AUTHORIZE_PARAMS`
  * JSON-woordenboek met aanvullende queryparameters die aan 'authorize'-verzoeken moeten worden toegevoegd.
    * Voorbeeld: `{"some_key": "some_value"}`
* `OVERLEAF_SAML_IDENTIFIER_FORMAT`
  * Naam-ID-formaat dat van de identity provider moet worden aangevraagd (standaard: `urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress`). Bij gebruik 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 afwijking die acceptabel is tussen client en server bij het controleren van de geldigheidsstempels 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 dat aan AuthnRequest moet worden toegevoegd om de IdP te instrueren welke attributenset aan de reactie moet worden gekoppeld ([link](http://blog.aniljohn.com/2014/01/data-minimization-front-channel-saml-attribute-requests.html)).
* `OVERLEAF_SAML_AUTHN_CONTEXT`
  * JSON-array van waarden voor naam-ID-formaat om de 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 authenticeren, zelfs als die een geldige sessie heeft.
* `OVERLEAF_SAML_DISABLE_REQUESTED_AUTHN_CONTEXT`
  * Als `true`, vraag geen specifieke auth-context op. U kunt dit bijvoorbeeld instellen op `true` om aanvullende contexten toe te staan, zoals wachtwoordloze aanmeldingen (`urn:oasis:names:tc:SAML:2.0:ac:classes:X509`). Ondersteuning voor aanvullende contexten is afhankelijk van je IdP.
* `OVERLEAF_SAML_AUTHN_REQUEST_BINDING`
  * Indien ingesteld op `HTTP-POST`, zal via HTTP POST-binding authenticatie van de IdP aanvragen, anders is HTTP-Redirect de standaard.
* `OVERLEAF_SAML_VALIDATE_IN_RESPONSE_TO`
  * Als `always`, dan wordt InResponseTo gevalideerd op binnenkomende SAML-reacties.
  * Als `nooit`, dan wordt InResponseTo niet gevalideerd (standaard).
  * Als `ifPresent`, dan wordt InResponseTo alleen gevalideerd als het aanwezig is in de inkomende SAML-reactie.
* `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 volledige SAML-authenticatiereactie, door de IdP worden ondertekend. Wanneer beide opties `false`, moet ten minste één van de assertions of de reactie zijn ondertekend.
* `OVERLEAF_SAML_REQUEST_ID_EXPIRATION_PERIOD_MS`
  * Bepaalt de vervaltijd wanneer een Request ID die voor een SAML-verzoek is gegenereerd niet geldig is als deze in een SAML-reactie wordt gezien in het `InResponseTo` veld. Standaard: 28800000 (8 uur).
* `OVERLEAF_SAML_LOGOUT_URL`
  * basisadres dat bij logout-verzoeken wordt aangeroepen (standaard: `entryPoint`).
    * Voorbeeld: `https://idp.example.com/simplesaml/saml2/idp/SingleLogoutService.php`
* `OVERLEAF_SAML_ADDITIONAL_LOGOUT_PARAMS`
  * JSON-woordenboek met aanvullende 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 door de SAML-IdP geretourneerde profiel het attribuut bevat dat is opgegeven door `OVERLEAF_SAML_IS_ADMIN_FIELD` en de waarde ervan overeenkomt met `OVERLEAF_SAML_IS_ADMIN_FIELD_VALUE` of een array is die bevat `OVERLEAF_SAML_IS_ADMIN_FIELD_VALUE`, anders `user.isAdmin` is ingesteld op `false`. Als een van deze variabelen niet is ingesteld, wordt de beheerdersstatus alleen ingesteld op `true` tijdens het aanmaken van een beheerder in Launchpad.

**Metadata voor de Identity Provider**

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

De Identity Provider moet zo worden geconfigureerd dat de Overleaf-server wordt herkend als een "Service Provider". Raadpleeg de documentatie van je SAML-server voor instructies om dit te doen.

Hieronder staat een voorbeeld van 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...
[overgeslagen]
</ds:X509Certificate>
        </ds:X509Data>
      </ds:KeyInfo>
    </KeyDescriptor>
    <KeyDescriptor use="encryption">
      <ds:KeyInfo>
        <ds:X509Data>
          <ds:X509Certificate>MII...
[overgeslagen]
</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 naar behoren in je IdP-configuratie in, of stuur het metadatabestand naar de IdP-beheerder.

<details>

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

<pre><code>OVERLEAF_APP_NAME="Our Overleaf Instance"

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 sta 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=E-mail
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/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.
