> ## Documentation Index
> Fetch the complete documentation index at: https://translations.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> Découvrez comment authentifier des utilisateurs en utilisant votre base de données comme fournisseur d’identité.

# Authentifier à l’aide de votre propre répertoire d’utilisateurs

<Card title="La disponibilité varie selon le forfait Auth0">
  Votre forfait Auth0 ou votre entente personnalisée déterminent si cette fonctionnalité est offerte. Pour en savoir plus, consultez [Tarification](https://auth0.com/pricing).
</Card>

Utilisez une connexion de base de données personnalisée lorsque vous voulez donner accès à votre propre référentiel de données d’identité autonome (ancien) aux fins suivantes :

* **Authentification** : utilisez votre base de données comme <Tooltip tip="fournisseur d’identité (IdP) : service qui stocke et gère les identités numériques." cta="Voir le glossaire" href="/fr-CA/docs/glossary?term=identity+provider">fournisseur d’identité</Tooltip> dans Auth0 pour authentifier les utilisateurs. (On parle alors d’authentification existante.)
* **Importer des utilisateurs** : utilisez la migration automatique (migration progressive ou à la volée)
* **Accès proxy à un locataire Auth0** : utilisez l’architecture multilocataire d’Auth0.

Vous pouvez créer et configurer une connexion de base de données personnalisée en effectuant l’une des tâches suivantes :

1. Utilisez le point de terminaison [Create connections](https://auth0.com/docs/api/management/v2#!/Connections/post_connections) avec la stratégie `auth0`.
2. Accédez à [Auth0 Dashboard > Authentication > Database](https://manage.auth0.com/#/connections/database), créez la connexion, puis activez l’option **Use my own database** pour permettre la modification du script d’action de base de données.

   <Frame>
     <img src="https://mintcdn.com/translations/3nS3prIggmJG9TUI/docs/images/cdy7uua7fh8z/3kgHDpBFdVWNq9XOfhsTXI/2efa43e44793b8dd69b9f9e8b54bf752/2025-02-25_10-20-20.png?fit=max&auto=format&n=3nS3prIggmJG9TUI&q=85&s=7aabe24b2fa1559facd2651d06d2fcc2" alt="Activer l’option Use my own database pour une base de données personnalisée" width="680" height="259" data-path="docs/images/cdy7uua7fh8z/3kgHDpBFdVWNq9XOfhsTXI/2efa43e44793b8dd69b9f9e8b54bf752/2025-02-25_10-20-20.png" />
   </Frame>

<div id="how-it-works">
  ## Fonctionnement
</div>

Comme l’illustre le diagramme ci-dessous, vous utilisez des connexions de base de données personnalisées dans le cadre du flux <Tooltip tip="Universal Login : votre application redirige vers Universal Login, hébergé sur le serveur d’autorisation d’Auth0, pour vérifier l’identité d’un utilisateur." cta="Voir le glossaire" href="/fr-CA/docs/glossary?term=Universal+Login">Universal Login</Tooltip> afin d’obtenir les renseignements d’identité de l’utilisateur à partir de votre propre référentiel d’identités hérité.

<Frame>
  <img src="https://mintcdn.com/translations/Dcx0M11uuptU53TX/docs/images/cdy7uua7fh8z/2lHqvZKFiEbAXURU2gmchc/626cac94211c266f2135a41456b2e49d/custom-database-connections.png?fit=max&auto=format&n=Dcx0M11uuptU53TX&q=85&s=e1ab24bc262d360a752fc0261c113919" alt="Anatomie des connexions de base de données personnalisées" width="459" height="512" data-path="docs/images/cdy7uua7fh8z/2lHqvZKFiEbAXURU2gmchc/626cac94211c266f2135a41456b2e49d/custom-database-connections.png" />
</Frame>

En plus des éléments communs à tous les types de [connexions de base de données](/fr-CA/docs/authenticate/database-connections), une connexion de base de données personnalisée vous permet de configurer des scripts d’action : du code personnalisé utilisé pour interagir avec votre référentiel d’identités hérité. Auth0 fournit des [modèles de scripts d’action pour les bases de données personnalisées](/fr-CA/docs/authenticate/database-connections/custom-db/templates) pour la configuration, et ceux que vous utiliserez dépendent du fait que vous créez une connexion de base de données personnalisée pour l’authentification héritée ou pour la migration automatique.

<Card title="Bonne pratique">
  Les scripts d’action peuvent être implémentés sous forme de fonctions anonymes. Toutefois, les fonctions anonymes compliquent le débogage lorsqu’il faut interpréter la pile d’appels générée à la suite d’une erreur. Nous vous recommandons donc de donner un nom de fonction à chaque script d’action.
</Card>

<div id="legacy-authentication-scenario">
  ### Scénario d’authentification hérité
</div>

Dans un scénario d’authentification hérité, un nouvel enregistrement utilisateur est créé dans Auth0 lors de la première connexion de l’utilisateur, mais Auth0 ne stocke pas le hachage de son mot de passe. Auth0 utilisera toujours le référentiel d’identités hérité et l’identité qu’il contient pour authentifier l’utilisateur.

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  Les connexions de base de données personnalisées sont également utilisées en dehors du flux Universal Login. Par exemple, le script d’action `changePassword` d’une connexion est appelé lorsqu’un utilisateur se trouvant dans un référentiel d’identités hérité effectue une opération de changement de mot de passe.
</Callout>

<div id="automatic-migration-scenario">
  ### Scénario de migration automatique
</div>

Lors d’une migration automatique ou progressive, Auth0 crée un nouvel utilisateur dans un magasin d’identités (base de données) géré par Auth0. Par la suite, Auth0 utilise toujours l’identité stockée dans le magasin d’identités géré par Auth0 pour authentifier l’utilisateur. Pour que cela se produise, Auth0 exige d’abord que l’utilisateur soit authentifié auprès de l’ancien magasin d’identités; ce n’est qu’en cas de succès que le nouvel utilisateur sera créé. Le nouvel utilisateur sera créé avec le même id et le même mot de passe que ceux fournis lors de l’authentification.

<Card title="Bonne pratique">
  La création d’un utilisateur dans un scénario de migration automatique a généralement lieu une fois le script d’action `login` terminé. Nous vous recommandons donc de ne pas tenter de supprimer un utilisateur de l’ancien magasin d’identités au moyen d’une opération en ligne (c.-à-d. dans le script `login`), mais plutôt d’effectuer cette suppression dans le cadre d’un processus distinct. Vous éviterez ainsi la suppression accidentelle d’un utilisateur si une erreur survient pendant le processus de migration.
</Card>

Dans un scénario de migration automatique, les utilisateurs demeurent dans l’ancien magasin d’identités et peuvent être supprimés ou archivés au besoin. Un effet secondaire peut toutefois se produire si un utilisateur est supprimé d’Auth0, mais est toujours présent dans l’ancien magasin d’identités. Dans ce cas, une tentative de connexion par l’utilisateur supprimé pourrait entraîner l’exécution du script `login` et/ou `getUser`, et l’utilisateur serait alors migré de nouveau depuis l’ancien magasin d’identités.

<Card title="Bonne pratique">
  Nous recommandons de marquer toute identité utilisateur existante comme ayant été migrée avant la fin de `login` ou de `getUser`, et avant toute suppression éventuelle de l’ancien magasin d’identités.
</Card>

<div id="size">
  ## Taille
</div>

La taille totale de l’implémentation de tout script Action ne doit pas dépasser 100 kB. Plus cette taille est grande, plus le processus d’empaquetage et de transport utilisé par la plateforme Webtask sans serveur d’Auth0 ajoute de la latence, ce qui a une incidence sur les performances de votre système.

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  La limite de 100 kB n’inclut pas les modules `npm` référencés dans des instructions `require`.
</Callout>

<div id="environment">
  ## Environnement
</div>

Les scripts Action s’exécutent sous la forme d’une série de fonctions JavaScript appelées dans une instance de conteneur Webtask sans serveur. Dans ce cadre, un environnement précis est fourni, ainsi qu’un certain nombre d’artefacts fournis à la fois par le conteneur Webtask et par le <Tooltip tip="Serveur d’authentification : serveur qui confirme ou refuse l’identité d’un utilisateur." cta="Voir le glossaire" href="/fr-CA/docs/glossary?term=authentication+server">serveur d’authentification</Tooltip> Auth0 (votre locataire Auth0) lui-même.

<div id="npm-modules">
  ### modules npm
</div>

Les conteneurs Webtask serverless d’Auth0 peuvent utiliser une [vaste gamme de modules npm](https://auth0-extensions.github.io/canirequire/) ; les modules `npm` réduisent non seulement la taille globale du code d’implémentation des scripts Action, mais donnent aussi accès à un large éventail de fonctionnalités prédéfinies.

De nombreux modules `npm` accessibles au public sont pris en charge d’emblée. La liste a été établie et vérifiée afin de relever tout problème de sécurité potentiel. Si vous avez besoin d’un module `npm` qui n’est pas pris en charge d’emblée, vous pouvez en faire la demande par l’entremise du [portail d’assistance Auth0](https://support.auth0.com) ou de votre représentant Auth0. Auth0 évaluera votre demande afin d’en déterminer la pertinence. À l’heure actuelle, Auth0 ne prend pas en charge l’utilisation de modules `npm` provenant de dépôts privés.

<div id="variables">
  ### Variables
</div>

Les scripts Action Auth0 prennent en charge les variables d’environnement, accessibles au moyen de ce qu’on appelle l’objet `configuration`, disponible globalement. Pour en savoir plus, consultez la section Add Configuration Parameters dans [Create Custom Database Connections](/fr-CA/docs/authenticate/database-connections/custom-db/create-db-connection).

<Card title="Bonne pratique">
  L’objet `configuration` doit être traité comme étant en lecture seule et servir à stocker des renseignements sensibles, comme des identifiants ou des clés d’API permettant d’accéder à des répertoires d’identités externes. Cela évite d’inscrire en dur, dans un script Action, des valeurs sensibles sur le plan de la sécurité.
</Card>

L’objet de configuration peut aussi servir à prendre en charge les stratégies de cycle de vie du développement logiciel (SDLC) que vous utilisez, en vous permettant de définir des variables dont les valeurs sont propres au locataire. Cela atténue le recours à des valeurs codées en dur dans un script Action qui peuvent changer selon le locataire qui l’exécute. Pour plus de détails, voir [Software Development Life Cycle (SDLC)](/fr-CA/docs/get-started/auth0-overview/create-tenants/set-up-multiple-environments).

<div id="global-object">
  ### objet global
</div>

Les conteneurs Webtask sans serveur d’Auth0 sont provisionnés à partir d’un pool associé à chaque locataire Auth0. Chaque instance de conteneur rend l’objet `global` accessible à tous les scripts d’action qui s’exécutent dans cette instance. L’objet `global` agit comme une variable globale propre au conteneur et peut servir à définir des informations ou des fonctions utilisées par tous les scripts d’action qui s’exécutent dans l’instance de conteneur.

Cela signifie que l’objet `global` peut être utilisé pour mettre en cache des ressources coûteuses, tant que celles-ci ne sont pas propres à un utilisateur. Par exemple, vous pourriez l’utiliser pour stocker un <Tooltip tip="Jeton d’accès : justificatif d’autorisation, sous la forme d’une chaîne opaque ou d’un JWT, utilisé pour accéder à une API." cta="Voir le glossaire" href="/fr-CA/docs/glossary?term=Access+Token">Jeton d’accès</Tooltip> pour une API tierce (de journalisation) qui offre des fonctionnalités non propres à l’utilisateur. Vous pourriez aussi y stocker un jeton d’accès pour votre propre API non propre à l’utilisateur, définie dans Auth0 et obtenu au moyen du [Client Credentials Flow](/fr-CA/docs/get-started/authentication-and-authorization-flow/client-credentials-flow).

<Warning>
  Un script d’action peut s’exécuter dans n’importe quelle instance de conteneur déjà en cours d’exécution, ou dans une nouvelle instance de conteneur (qui pourrait ensuite être ajoutée au pool). Il n’existe aucune affinité de conteneur pour l’exécution des scripts d’action dans Auth0. Cela signifie que vous devez éviter de stocker dans l’objet `global` toute information propre à un utilisateur et toujours vous assurer que toute déclaration faite dans l’objet `global` prévoit également une initialisation.
</Warning>

Chaque fois qu’un conteneur Webtask est recyclé, ou à chaque création d’un nouveau conteneur Webtask, l’objet `global` qu’il définit est réinitialisé. Par conséquent, toute déclaration d’affectation dans l’objet `global` associé à un conteneur doit également prévoir une initialisation.

<Card title="Bonne pratique">
  Pour offrir une plus grande flexibilité en matière de performance, les conteneurs Webtask sans serveur sont provisionnés dans Auth0 de façon ponctuelle et sont également soumis à diverses politiques de recyclage. En règle générale, nous vous recommandons de ne pas considérer la durée de vie d’un objet `global` comme dépassant 20 minutes.
</Card>

<div id="security">
  ## Sécurité
</div>

<div id="access-legacy-identity-storage-via-custom-api">
  ### Accéder au magasin d’identités hérité au moyen d’une API personnalisée
</div>

Protéger le magasin d’identités hérité contre tout accès non restreint est une bonne pratique recommandée. Par exemple, exposer directement une base de données à Internet peut être extrêmement problématique : les interfaces de bases de données SQL et similaires offrent des fonctionnalités très étendues, ce qui va à l’encontre du principe du moindre privilège en matière de sécurité.

<Card title="Bonne pratique">
  Nous vous recommandons de mettre en place une API afin d’appliquer le principe du moindre privilège à votre magasin d’identités hérité (base de données), plutôt que d’ouvrir simplement un accès général par Internet.
</Card>

L’autre solution consiste à créer une API simple (personnalisée), protégée par un jeton d’accès, que chaque script d’action peut appeler. Elle servirait alors d’interface au magasin d’identités hérité. Le flux Client Credentials peut ensuite être utilisé pour obtenir un jeton d’accès à partir d’un script, puis ce jeton peut être mis en cache dans l’objet `global` pour être réutilisé afin d’améliorer les performances. L’API peut alors fournir un nombre restreint de points de terminaison protégés qui n’exécutent que les fonctions de gestion héritées requises (par exemple, `read user`, `change password`).

<Card title="Bonne pratique">
  Par défaut, Auth0 vous remettra un jeton pour n’importe quelle API si vous vous authentifiez avec succès et incluez l’audience appropriée. Restreindre l’accès à l’API du magasin d’identités hérité en limitant l’attribution des jetons d’accès au moyen d’une Rule empêchera toute utilisation non autorisée et atténuera plusieurs scénarios d’attaque, notamment lorsqu’une redirection vers `/authorize` est interceptée et que l’audience de l’API est ajoutée.
</Card>

<div id="allowlist-access-to-legacy-identity-storage">
  ### Mettre en liste d’autorisation l’accès au stockage d’identités hérité
</div>

Que vous gériez l’accès à un magasin d’identités hérité au moyen d’une API personnalisée ou de l’interface native fournie, limitez l’accès à la liste des adresses IP associées à votre locataire Auth0. La mise en liste d’autorisation limite l’accès au magasin d’identités hérité et garantit que seuls les scripts d’Action de base de données personnalisés définis dans Auth0 sont autorisés.

<Warning>
  La liste d’autorisation d’adresses IP d’Auth0 est partagée entre tous les locataires Auth0 définis dans une même région. N’utilisez jamais la liste d’autorisation comme seule méthode pour sécuriser l’accès à votre magasin d’identités hérité; cela pourrait créer des vulnérabilités de sécurité et permettre un accès non autorisé à vos utilisateurs.
</Warning>

<div id="learn-more">
  ## Pour en savoir plus
</div>

* [Créer des connexions de base de données personnalisées](/fr-CA/docs/authenticate/database-connections/custom-db/create-db-connection)
* [Modèles de scripts Action pour les bases de données personnalisées](/fr-CA/docs/authenticate/database-connections/custom-db/templates)
* [Résoudre les problèmes liés aux bases de données personnalisées](/fr-CA/docs/authenticate/database-connections/custom-db/error-handling)
* [Importer et exporter des utilisateurs](/fr-CA/docs/manage-users/user-migration)
