> 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/fr/configuration/overleaf-toolkit/authentication/oidc-authentication.md).

# Authentification OIDC

Cette fonctionnalité a été développée par [yu-i-i/overleaf-cep](https://github.com/yu-i-i/overleaf-cep). Ici, nous proposons quelques documents pour votre configuration.

### Configuration

En interne, le module OIDC d’Overleaf utilise la [passport-openidconnect](https://github.com/jaredhanson/passport-openidconnect) bibliothèque. Si vous rencontrez des problèmes pour configurer OpenID Connect, il vaut la peine de lire le README de `passport-openidconnect` afin de vous faire une idée de la configuration attendue.

La variable d'environnement `EXTERNAL_AUTH` est requis pour activer le module d’authentification OIDC. Cette variable d’environnement précise quelles méthodes d’authentification externes sont activées. La valeur de cette variable est une liste. Si la liste inclut `oidc` alors l’authentification OIDC sera activée.

Par exemple : `EXTERNAL_AUTH=ldap oidc`

Lorsque la méthode d’authentification OIDC est utilisée, l’utilisateur est redirigé vers le site d’authentification du fournisseur d’identité (IdP). Si l’IdP authentifie l’utilisateur avec succès, la base de données des utilisateurs d’Overleaf est vérifiée pour trouver un enregistrement contenant un `thirdPartyIdentifiers` champ structuré comme suit :

```
thirdPartyIdentifiers: [
  {
    externalUserId: "...",
    externalData: null,
    providerId: "..."
  }
]
```

Le `externalUserId` doit correspondre à l’ID utilisateur dans le profil renvoyé par le serveur IdP (voir la `OVERLEAF_OIDC_USER_ID_FIELD` variable d’environnement), et `providerId` doit correspondre à l’ID du fournisseur OIDC (voir la `OVERLEAF_OIDC_PROVIDER_ID`).

Si aucun enregistrement correspondant n’est trouvé, la base de données est consultée pour rechercher un utilisateur dont l’adresse e-mail principale correspond à l’e-mail du profil utilisateur IdP :

* Si un tel utilisateur est trouvé, le `thirdPartyIdentifiers` champ est mis à jour.
* Si aucun utilisateur correspondant n’est trouvé et que la création de compte JIT n’est pas désactivée, un nouvel utilisateur est créé avec l’adresse e-mail et `thirdPartyIdentifiers` du profil IdP.

Dans les deux cas, on dit que l’utilisateur est « lié » à l’utilisateur OIDC externe. L’utilisateur peut être dissocié du fournisseur OIDC sur la `/user/settings` page.

#### Variables d'environnement

Les valeurs des cinq variables requises suivantes peuvent être trouvées en utilisant `.well-known/openid-configuration` du point de terminaison de votre fournisseur OpenID (OP).

* `OVERLEAF_OIDC_ISSUER` **(requis)**
* `OVERLEAF_OIDC_AUTHORIZATION_URL` **(requis)**
* `OVERLEAF_OIDC_TOKEN_URL` **(requis)**
* `OVERLEAF_OIDC_USER_INFO_URL` **(requis)**
* `OVERLEAF_OIDC_LOGOUT_URL` **(requis)**

Les valeurs des deux variables requises suivantes seront fournies par l’administrateur de votre OP

* `OVERLEAF_OIDC_CLIENT_ID` **(requis)**
* `OVERLEAF_OIDC_CLIENT_SECRET` **(requis)**
* `OVERLEAF_OIDC_SCOPE`
  * Par défaut : `openid profile email`
* `OVERLEAF_OIDC_PROVIDER_ID`
  * ID arbitraire de l’OP, par défaut `oidc`.
* `OVERLEAF_OIDC_PROVIDER_NAME`
  * Le nom de l’OP, utilisé sur la `Comptes liés` section du `/user/settings` page, par défaut `Fournisseur OIDC`.
* `OVERLEAF_OIDC_IDENTITY_SERVICE_NAME`
  * Nom d’affichage du service d’identité, utilisé sur la page de connexion (par défaut : `Se connecter avec $OVERLEAF_OIDC_PROVIDER_NAME`).
* `OVERLEAF_OIDC_PROVIDER_DESCRIPTION`
  * Description de l’OP, utilisée dans la `Comptes liés` section (par défaut : `Se connecter avec $OVERLEAF_OIDC_PROVIDER_NAME`).
* `OVERLEAF_OIDC_PROVIDER_INFO_LINK`
  * `En savoir plus` URL dans la description de l’OP, par défaut : aucun `En savoir plus` lien dans la description.
* `OVERLEAF_OIDC_PROVIDER_HIDE_NOT_LINKED`
  * Ne pas afficher l’OP sur la `/user/settings` page, si le compte de l’utilisateur n’est pas lié à l’OP, par défaut `false`.
* `OVERLEAF_OIDC_USER_ID_FIELD`
  * La valeur de cet attribut sera utilisée par Overleaf comme ID utilisateur externe, par défaut `id`. D’autres valeurs raisonnables possibles sont `email` et `nom d'utilisateur` (correspondant à `preferred_username` revendication OIDC).
* `OVERLEAF_OIDC_ALLOWED_EMAIL_DOMAINS`
  * Restreint la création de compte Just-in-Time (JIT) pour les utilisateurs s’authentifiant via OIDC. Si elle est définie sur une liste de noms de domaine séparés par des virgules, un nouveau compte ne sera créé que si le domaine de l’adresse e-mail de l’utilisateur correspond à l’un des domaines listés. Si le domaine ne correspond pas, un administrateur doit créer manuellement le compte utilisateur en utilisant l’adresse e-mail de l’utilisateur OIDC, avec soit un mot de passe aléatoire fort, soit, de préférence, sans le `hashedPassword` champ du tout. Les noms de domaine peuvent inclure un préfixe `*.` joker pour correspondre aux sous-domaines.
    * Exemple : pour autoriser la création de comptes JIT pour des utilisateurs ayant des adresses e-mail comme `name@example.com` et `name@math.example.com`:\
      `OVERLEAF_OIDC_ALLOWED_EMAIL_DOMAINS=example.com, *.example.com`
    * Exemple : pour désactiver complètement la création de comptes JIT :\
      `OVERLEAF_OIDC_ALLOWED_EMAIL_DOMAINS=`
* `OVERLEAF_OIDC_UPDATE_USER_DETAILS_ON_LOGIN`
  * Si défini sur `true`, met à jour l’utilisateur `first_name` et `last_name` champ à la connexion, et désactive le formulaire des détails de l’utilisateur sur `/user/settings` page.
* `OVERLEAF_OIDC_IS_ADMIN_FIELD` et `OVERLEAF_OIDC_IS_ADMIN_FIELD_VALUE`
  * Lorsque les deux variables d'environnement sont définies, le processus de connexion met à jour `user.isAdmin = true` si le profil renvoyé par l’OP contient l’attribut spécifié par `OVERLEAF_OIDC_IS_ADMIN_FIELD` et que sa valeur correspond à `OVERLEAF_OIDC_IS_ADMIN_FIELD_VALUE`, sinon `user.isAdmin` est défini à `false`. Si `OVERLEAF_OIDC_IS_ADMIN_FIELD` est `email` alors la valeur de l’attribut `emails[0].value` est utilisée pour la vérification de la correspondance.

L’URL de redirection pour votre fournisseur OpenID est `https://my-overleaf-instance.com/oidc/login/callback`.

<details>

<summary>Exemple de fichier variables.env</summary>

{% code title="variables.env" overflow="wrap" %}

```dotenv
OVERLEAF_APP_NAME="Notre instance Overleaf"

ENABLED_LINKED_FILE_TYPES=project_file,project_output_file,url

# Active la génération de miniatures avec ImageMagick
ENABLE_CONVERSIONS=true

# Désactive l'exigence de confirmation par e-mail
EMAIL_CONFIRMATION_DISABLED=true

## Nginx
# NGINX_WORKER_PROCESSES=4
# NGINX_WORKER_CONNECTIONS=768

## Définir pour 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": "Contactez votre équipe d'assistance", "url": "mailto:support@example.com"}]
OVERLEAF_RIGHT_FOOTER=[{"text":"Bonjour, je suis à droite", "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=Ce système est géré par le département x

OVERLEAF_PROXY_LEARN=true
NAV_HIDE_POWERED_BY=true

#################
## OIDC pour CE ##
#################

EXTERNAL_AUTH=oidc

OVERLEAF_OIDC_PROVIDER_ID=oidc
OVERLEAF_OIDC_ISSUER=https://keycloak.provider.com/realms/example
OVERLEAF_OIDC_AUTHORIZATION_URL=https://keycloak.provider.com/realms/example/protocol/openid-connect/auth
OVERLEAF_OIDC_TOKEN_URL=https://keycloak.provider.com/realms/example/protocol/openid-connect/token
OVERLEAF_OIDC_USER_INFO_URL=https://keycloak.provider.com/realms/example/protocol/openid-connect/userinfo
OVERLEAF_OIDC_LOGOUT_URL=https://keycloak.provider.com/realms/example/protocol/openid-connect/logout
OVERLEAF_OIDC_CLIENT_ID=Overleaf-OIDC
OVERLEAF_OIDC_CLIENT_SECRET=DoNotUseThisATGgaAcTgCcATgGATTACAagGtTCaGcGTAG
OVERLEAF_OIDC_IDENTITY_SERVICE_NAME='Log in with Keycloak OIDC Provider'
OVERLEAF_OIDC_PROVIDER_NAME=OIDC Keycloak Provider
OVERLEAF_OIDC_PROVIDER_INFO_LINK=https://openid.net
OVERLEAF_OIDC_IS_ADMIN_FIELD=email
OVERLEAF_OIDC_IS_ADMIN_FIELD_VALUE=overleaf.admin@example.com
OVERLEAF_OIDC_UPDATE_USER_DETAILS_ON_LOGIN=false
```

{% endcode %}

</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/fr/configuration/overleaf-toolkit/authentication/oidc-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.
