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

# Créer des connexions de base de données personnalisées

> Utilisez votre propre répertoire d’utilisateurs externe comme IdP dans Auth0 en créant une connexion de base de données personnalisée.

Si vous avez votre propre répertoire d’utilisateurs externe, vous pouvez l’utiliser comme <Tooltip tip="Identity Provider (IdP) : Service qui stocke et gère les identités numériques." cta="Voir le glossaire" href="/docs/fr-ca/glossary?term=identity+provider">fournisseur d’identité</Tooltip> dans Auth0 pour authentifier les utilisateurs.

Pour ce faire, connectez d’abord Auth0 à votre répertoire d’utilisateurs externe en créant une connexion de base de données personnalisée, puis rédigez des scripts d’action de base de données pour définir la façon dont Auth0 interagit avec votre référentiel d’utilisateurs. Nous fournissons des modèles de scripts d’action de base de données pour plusieurs bases de données courantes :

* MongoDB
* MySQL
* PostgreSQL
* Microsoft SQL Server
* ASP.NET Identity
* Services Web accessibles avec authentification Basic

Vous pouvez modifier ces modèles ou rédiger les vôtres de A à Z pour vous connecter à tout type de répertoire d’utilisateurs externe.

<div id="instructions">
  ## Instructions
</div>

<Steps titleSize="h3">
  <Step title="Prérequis">
    * Votre référentiel d’utilisateurs externe doit être accessible à partir des serveurs d’Auth0. S’il se trouve derrière un pare-feu, autorisez le trafic entrant provenant des [adresses IP sortantes d’Auth0](/docs/fr-ca/secure/security-guidance/data-security/allowlist).

    * Votre référentiel d’utilisateurs externe doit comporter les champs nécessaires pour stocker les [attributs du profil utilisateur normalisé](/docs/fr-ca/manage-users/user-accounts/user-profiles/normalized-user-profile-schema), comme `id`, `nickname`, `email` et `password`.

    * La valeur `id` (ou `user_id`) renvoyée par vos scripts d’action de base de données doit être unique parmi toutes les connexions de base de données personnalisées, car Auth0 utilise cette valeur pour [identifier les utilisateurs](/docs/fr-ca/manage-users/user-accounts/identify-users).

      Pour éviter les collisions d’ID utilisateur lorsque vous utilisez plusieurs connexions de base de données personnalisées, nous vous recommandons de préfixer les valeurs `id` par le nom de la connexion (sans les espaces).
  </Step>

  <Step title="Créer la connexion à la base de données personnalisée">
    Dans [**Auth0 Dashboard > Authentification > Base de données**](https://manage.auth0.com/#/connections/database), sélectionnez **+ Créer une connexion de base de données**. Dans [la page **Nouvelle connexion de base de données**](https://manage.auth0.com/#/connections/database/new), entrez la configuration suivante.

    * Entrez un nom qui doit :

      * Contenir uniquement des caractères alphanumériques et des tirets.
      * Commencer et se terminer par un caractère alphanumérique.
      * Ne pas dépasser 35 caractères.

    * Choisissez un ou plusieurs [attributs](/docs/fr-ca/authenticate/database-connections/activate-and-configure-attributes-for-flexible-identifiers) comme identifiants d’utilisateur.

    * Choisissez une ou plusieurs méthodes d’authentification (comme les [mots de passe](/docs/fr-ca/authenticate/database-connections/flexible-password-policy) ou les [clés d’accès](/docs/fr-ca/authenticate/database-connections/passkeys)).

    * Activez la bascule **Utiliser ma propre base de données**.

    Lorsque vous avez terminé, sélectionnez **Créer**. Auth0 crée la connexion de base de données et vous redirige vers sa page de configuration.
  </Step>

  <Step title="Rédiger des scripts d’action de base de données">
    Une fois votre connexion de base de données personnalisée créée, vous devez écrire des [scripts d’action de base de données](/docs/fr-ca/authenticate/database-connections/custom-db/custom-database-connections-scripts) pour définir comment Auth0 interagit avec votre magasin d’utilisateurs externe pour des fonctionnalités telles que la connexion, l’inscription, la vérification de l’adresse courriel, la réinitialisation de mot de passe et la suppression d’utilisateurs.

    Au minimum, vous devez implémenter un [script Login](/docs/fr-ca/authenticate/database-connections/custom-db/templates/login) :

    1. Dans la page de la connexion de base de données, sélectionnez l’onglet **Custom Database**.

    2. Dans la section **Database Action Scripts**, sélectionnez **Login**.

    3. Écrivez votre propre script d’action de base de données à l’aide de la signature de fonction fournie, ou utilisez le menu déroulant **Load Template** pour sélectionner un modèle de départ.

           <Accordion title="Exemple de script d’action Login pour MySQL">
             Par exemple, le modèle de script d’action Login pour MySQL se présente comme suit :

             ```js expandable Login database action script template for MySQL theme={null}
             function login(identifierValue, password, callback) {
               const mysql = require('mysql');
               const bcrypt = require('bcrypt');

               const connection = mysql.createConnection({
                 host: 'localhost',
                 user: 'me',
                 password: 'secret',
                 database: 'mydb'
               });

               connection.connect();

               const query = 'SELECT id, nickname, email, password FROM users WHERE email = ?';

               connection.query(query, [ identifierValue ], function(err, results) {
                 if (err) return callback(err);
                 if (results.length === 0) return callback(new WrongUsernameOrPasswordError(identifierValue));
                 const user = results[0];

                 bcrypt.compare(password, user.password, function(err, isValid) {
                   if (err || !isValid) return callback(err || new WrongUsernameOrPasswordError(identifierValue));

                   callback(null, {
                     user_id: user.id.toString(),
                     nickname: user.nickname,
                     email: user.email
                   });
                 });
               });
             }
             ```

             Cet exemple suppose que la base de données contient une table `users` avec les colonnes appropriées. Le script se connecte à la base de données, utilise une requête pour récupérer le premier utilisateur dont `email == user.email`, valide le mot de passe saisi avec `bcrypt.compare` et, en cas de réussite, renvoie un objet contenant les renseignements du profil utilisateur (y compris `id`, `nickname` et `email`).
           </Accordion>

    Tous les scripts d’action de base de données doivent appeler exactement une fois la [fonction `callback`](/docs/fr-ca/authenticate/database-connections/custom-db/custom-database-connections-scripts#callback) fournie par Auth0, immédiatement avant de se terminer (implicitement ou explicitement au moyen d’une instruction `return`).
  </Step>

  <Step title="Ajouter des paramètres de configuration (facultatif)">
    Dans la section **Paramètres de configuration** (sous **Scripts d’action de base de données**), vous pouvez stocker des valeurs accessibles à tous les scripts d’action de base de données dans l’objet global `configuration`.

    Les valeurs sont chiffrées. Vous pouvez donc également utiliser les paramètres de configuration pour stocker des renseignements sensibles, tels que des identifiants ou des clés API permettant d’accéder à des répertoires d’identités externes, ou pour définir des variables contenant des valeurs propres au tenant.

    Pour reprendre l’exemple MySQL précédent, si vous ajoutez la **Clé** `MYSQL_PASSWORD` et définissez comme **Valeur** le mot de passe MySQL, vous pouvez utiliser ce paramètre de configuration pour vous connecter :

    ```javascript MySQL connection configuration parameter example theme={null}
    const connection = mysql.createConnection({
        host: 'localhost',
        user: 'me',
        password: 'secret', // [!code --]
        password : configuration.MYSQL_PASSWORD, // [!code ++]
        database: 'mydb'
    });
    ```

    Traitez l’objet `configuration` comme étant en lecture seule et utilisez-le pour éviter d’intégrer des valeurs en dur dans vos scripts d’action.
  </Step>

  <Step title="Tester et enregistrer le script d’action de la base de données">
    1. Pour tester votre script d’action de base de données, sélectionnez **Enregistrer et essayer** au-dessus du bloc de code.

    2. Dans la fenêtre **Essayer le script de connexion** qui s’ouvre, saisissez les identifiants de l’utilisateur à utiliser pour le test.

           <Frame>
             <img src="https://mintcdn.com/translations/c0RQ9V0YAcT0-8l5/docs/images/cdy7uua7fh8z/8uBGZhHYZwOcO19ljJNNp/ccd69d84fdbdff90dc779a6b1ea8a6fd/db-connection-try-login-script.png?fit=max&auto=format&n=c0RQ9V0YAcT0-8l5&q=85&s=ec2a8cb2d4ce996d1671554ebf503413" alt="Fenêtre Essayer le script de connexion." width="496" height="360" data-path="docs/images/cdy7uua7fh8z/8uBGZhHYZwOcO19ljJNNp/ccd69d84fdbdff90dc779a6b1ea8a6fd/db-connection-try-login-script.png" />
           </Frame>

    3. Sélectionnez **Essayer** pour ouvrir le sélecteur d’environnement d’exécution. Choisissez l’environnement d’exécution dans lequel exécuter le script.

           <Tip>
             Vous pouvez [modifier l’environnement d’exécution NodeJS par défaut](/docs/fr-ca/get-started/tenant-settings#extensibility) dans les paramètres de votre tenant.
           </Tip>

    Lorsque vous avez terminé, fermez la fenêtre **Essayer le script de connexion**, puis sélectionnez **Enregistrer** pour enregistrer le script.
  </Step>
</Steps>

<div id="next-steps">
  ## Étapes suivantes
</div>

<div id="enable-automatic-migration">
  ### Activer la migration automatique
</div>

Vous pouvez continuer à utiliser votre répertoire d’utilisateurs externe comme IdP. Si vous souhaitez plutôt passer au répertoire d’utilisateurs d’Auth0, vous pouvez [migrer progressivement vos utilisateurs vers Auth0](/docs/fr-ca/manage-users/user-migration/configure-automatic-migration-from-your-database) (parfois appelée migration *trickle* ou *lazy*).

<div id="enable-organization-context">
  ### Activer le contexte de l’organisation
</div>

Si vous utilisez des connexions de bases de données personnalisées avec [Organizations](/docs/fr-ca/manage-users/organizations), vous pouvez rendre les informations de l’organisation, comme `id`, `name` et `metadata`, accessibles à vos scripts d’action de base de données en activant [l’objet `context`](/docs/fr-ca/authenticate/database-connections/custom-db/custom-database-connections-scripts#context-object).

Cette opération transmet un argument `context` supplémentaire aux scripts de bases de données personnalisées, qui contient les données de l’organisation. Par exemple, lorsqu’un utilisateur s’authentifie à partir de l’invite de connexion d’une organisation, le script d’action de base de données Login reçoit cet argument.

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  Vous ne pouvez pas désactiver l’objet `context` après l’avoir activé.
</Callout>

Commencez par activer l’objet `context` :

1. Accédez à [Auth0 Dashboard > Authentification > Base de données](https://manage.auth0.com/dashboard/us/#/connections/database/) et sélectionnez votre connexion de base de données.

2. Sélectionnez l’onglet **Base de données personnalisée**.

3. À côté de **Objet context dans les scripts de base de données**, sélectionnez **Activer**.

4. Dans la fenêtre **Êtes-vous absolument certain ?** qui s’ouvre, sélectionnez **Confirmer**.

Ensuite, ajoutez l’objet `context` à vos scripts d’action de base de données. Ce paramètre précède directement le paramètre `callback`. Par exemple, dans la signature de fonction du script Login :

```js Original Login script function signature theme={null}
function login(email, password, callback) { ... }
```

```js Login script function signature with the context object theme={null}
function login(email, password, context, callback) { ... }
```

L’objet `context` contient les données relatives à l’Organization au format suivant :

```json lines theme={null}
{
    "organization": {
        "display_name": "My Organization",
        "id": "org_XXXXXX",
        "metadata": {
            "example": "value"
        },
        "name": "my-organization"
    }
}
```

Lorsque des événements sont déclenchés dans le contexte d’une organisation, les données correspondantes sont accessibles à tous les scripts d’action de base de données, à l’exception du [script Delete](/docs/fr-ca/authenticate/database-connections/custom-db/templates/delete), auquel un objet `context` vide est toujours transmis.

<div id="limits-and-considerations">
  ## Limites et considérations
</div>

* Auth0 n’assainit ni ne valide aucune combinaison de nom d’utilisateur et de mot de passe transmise par une base de données personnalisée.

* Les scripts d’action de base de données sont assujettis à la [politique de limitation du débit](/docs/fr-ca/troubleshoot/customer-support/operational-policies/rate-limit-policy) d’Auth0.
