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

# Personnaliser Adaptive MFA

> Personnalisez l’Adaptive MFA d’Auth0 avec Actions afin d’utiliser le niveau de confiance et les détails de l’évaluation des risques pour déterminer s’il faut demander une vérification, autoriser ou bloquer une tentative de connexion.

Vous pouvez personnaliser <Tooltip tip="Adaptive Multi-factor Authentication : authentification multifacteur (AMF) qui n’est déclenchée pour les utilisateurs que lorsqu’une tentative de connexion est jugée peu fiable." cta="Voir le glossaire" href="/docs/fr-ca/glossary?term=Adaptive+MFA">Adaptive MFA</Tooltip> dans divers scénarios avec [Auth0 Actions](/docs/fr-ca/customize/actions).

<div id="when-to-customize-adaptive-mfa">
  ## Quand personnaliser Adaptive AMF
</div>

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  Vous ne devriez envisager de personnaliser Adaptive AMF que si vos utilisateurs sont inscrits à l’authentification multifacteur et doivent utiliser une adresse courriel comme identifiant.
</Callout>

Si vos utilisateurs ne sont pas inscrits à <Tooltip tip="Authentification multifacteur (AMF) : processus d’authentification de l’utilisateur qui utilise un facteur en plus du nom d’utilisateur et du mot de passe, comme un code envoyé par SMS." cta="Voir le glossaire" href="/docs/fr-ca/glossary?term=MFA">AMF</Tooltip>, vous devriez utiliser la politique par défaut d’Adaptive AMF. Si un utilisateur n’est pas inscrit à l’authentification multifacteur et que votre Action évalue le risque comme élevé, vos options pour arrêter un <Tooltip tip="Acteurs malveillants : entité (une personne ou un groupe) qui représente une menace pour l’entreprise ou l’environnement avec l’intention de nuire." cta="Voir le glossaire" href="/docs/fr-ca/glossary?term=bad+actor">acteur malveillant</Tooltip> sont limitées.

Avant de commencer à personnaliser Adaptive AMF, posez-vous quelques questions :

* À quel niveau de confiance voulez-vous déclencher l’AMF ?
* Comment voulez-vous mesurer le risque ?
* Voulez-vous qu’Auth0 mesure le niveau de confiance ou préférez-vous utiliser une mesure personnalisée ?
* Comment allez-vous gérer les utilisateurs qui ne sont pas inscrits à l’authentification multifacteur ?

<div id="confidence-scores">
  ## Scores de confiance
</div>

Adaptive MFA calcule un score de confiance global à partir de l’analyse de trois évaluations : `NewDevice`, `ImpossibleTravel` et `UntrustedIP`. Pour en savoir plus, consultez [Adaptive MFA : fonctionnement](/docs/fr-ca/secure/multi-factor-authentication/adaptive-mfa).

Chaque évaluation a son propre score de confiance, et chaque score de confiance est associé à une action :

| Score de confiance | Description                                                                                                 | Action                                    |
| ------------------ | ----------------------------------------------------------------------------------------------------------- | ----------------------------------------- |
| `low`              | La transaction de connexion ne correspond pas aux comportements que l’utilisateur a déjà manifestés.        | Exiger l’AMF.                             |
| `medium`           | La transaction de connexion correspond partiellement aux comportements que l’utilisateur a déjà manifestés. | Ne pas exiger l’AMF.                      |
| `high`             | La transaction de connexion correspond étroitement aux comportements que l’utilisateur a déjà manifestés.   | Ne pas exiger l’AMF.                      |
| `neutral`          | S/O. Réservé pour une utilisation future.                                                                   | S/O. Réservé pour une utilisation future. |

<Accordion title="Voir des exemples de scénarios à risque élevé et à faible risque avec différents scores de confiance.">
  Le tableau suivant décrit les scénarios à risque élevé qui donnent un score de confiance `low` :

  | État de l’utilisateur | Friction de connexion souhaitée              | Politique d’enrôlement souhaitée                                             | Mise en œuvre                                                            |
  | --------------------- | -------------------------------------------- | ---------------------------------------------------------------------------- | ------------------------------------------------------------------------ |
  | Inscrit à l’AMF       | Ne pas exiger l’AMF                          | S/O (utilisateur déjà inscrit)                                               | Utiliser une Action pour contourner l’AMF                                |
  | Non inscrit à l’AMF   | Exiger la vérification de l’adresse courriel | Ignorer l’enrôlement (ne pas recueillir d’authentificateurs supplémentaires) | Comportement par défaut (aucune Action liée à l’AMF)                     |
  | Non inscrit à l’AMF   | Exiger la vérification de l’adresse courriel | Exiger l’enrôlement à l’AMF (recueillir un authentificateur supplémentaire)  | Utiliser une Action pour forcer l’enrôlement à l’AMF (modèle disponible) |

  Le tableau suivant décrit les scénarios à faible risque qui donnent un score de confiance `high` :

  | État de l’utilisateur | Friction de connexion souhaitée | Politique d’enrôlement souhaitée                                             | Mise en œuvre                                                            |
  | --------------------- | ------------------------------- | ---------------------------------------------------------------------------- | ------------------------------------------------------------------------ |
  | Inscrit à l’AMF       | Aucune friction                 | S/O (utilisateur déjà inscrit)                                               | Comportement par défaut (aucune Action liée à l’AMF)                     |
  | Non inscrit à l’AMF   | Aucune friction                 | Ignorer l’enrôlement (ne pas recueillir d’authentificateurs supplémentaires) | Comportement par défaut (aucune Action liée à l’AMF)                     |
  | Non inscrit à l’AMF   | Aucune friction                 | Exiger l’enrôlement à l’AMF (recueillir un authentificateur supplémentaire)  | Utiliser une Action pour forcer l’enrôlement à l’AMF (modèle disponible) |
</Accordion>

Si vous souhaitez mettre en œuvre votre propre méthode pour évaluer le score de confiance global de différents scénarios, vous pouvez utiliser les données disponibles dans l’objet `riskAssessment`, qui contient le score de confiance global, des renseignements sur le versionnage et les détails des évaluations individuelles.

Vous pouvez consulter la description complète, les propriétés et les valeurs de l’objet `riskAssessment` dans la [référence `riskAssessment` du déclencheur post-login d’Actions](/docs/fr-ca/customize/actions/explore-triggers/signup-and-login-triggers/login-trigger/post-login-event-object#param-risk-assessment).

<div id="action-result-outcomes">
  ## Résultats des Actions
</div>

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  Les Actions qui déclenchent l’AMF ont préséance sur le comportement par défaut d’Adaptive MFA.
</Callout>

Si l’une de vos Actions déclenche l’AMF en fonction du score de confiance, la politique Adaptive MFA par défaut déclenche l’AMF lorsque le score de confiance est `low`.

Le tableau suivant présente les résultats possibles selon la combinaison des Actions et des actions de la politique Adaptive MFA par défaut.

| Résultat de l’Action | Action Adaptive MFA | Résultat           |
| -------------------- | ------------------- | ------------------ |
| Non autorisé         | Déclencher l’AMF    | Non autorisé       |
| Non autorisé         | Aucune AMF requise  | Non autorisé       |
| Déclencher l’AMF     | Déclencher l’AMF    | Déclencher l’AMF   |
| Déclencher l’AMF     | Aucune AMF requise  | Déclencher l’AMF   |
| Aucune AMF requise   | Déclencher l’AMF    | Déclencher l’AMF   |
| Aucune AMF requise   | Aucune AMF requise  | Aucune AMF requise |

<div id="action-templates">
  ## Modèles d’Action
</div>

Auth0 propose deux modèles d’Action basés sur Adaptive MFA que vous pouvez personnaliser : [Adaptive MFA](#adaptive-mfa-template) et [Require MFA Enrollment](#require-mfa-enrollment-template).

<div id="adaptive-mfa-template">
  ### Modèle Adaptive MFA
</div>

Ce modèle fournit un exemple et un point de départ pour créer un flux métier personnalisé à l’aide d’évaluations du risque individuelles. Cet exemple utilise :

* Le déclencheur d’Action [`api.multifactor.enable`](/docs/fr-ca/customize/actions/explore-triggers/signup-and-login-triggers/login-trigger/post-login-api-object#api-multifactor) pour gérer à la fois l’enrôlement et l’envoi des demandes de vérification MFA configurées à la fin du flux de connexion.
* Le déclencheur Actions [`event.user.multifactor`](/docs/fr-ca/customize/actions/explore-triggers/signup-and-login-triggers/login-trigger/post-login-event-object) avec les facteurs auxquels l’utilisateur est déjà inscrit.

```javascript lines expandable theme={null}
/**
* Gestionnaire qui sera appelé lors de l'exécution d'un flux Post-Login.
*
* @param {Event} event - Détails sur l'utilisateur et le contexte dans lequel il se connecte.
* @param {PostLoginAPI} api - Interface dont les méthodes peuvent être utilisées pour modifier le comportement de la connexion.
*/
exports.onExecutePostLogin = async (event, api) => {
    // Déterminer quels scores de confiance doivent déclencher l'AMF, pour plus d'informations, consulter
    const promptConfidences = ['low', 'medium'];

    // Exemple de condition : demander l'AMF uniquement en fonction du niveau de confiance
    // NewDevice; cela déclenchera l'AMF lorsqu'un utilisateur se connecte
    // depuis un appareil inconnu.
    const confidence =
        event.authentication?.riskAssessment?.assessments?.NewDevice
            ?.confidence;
    const shouldPromptMfa =
        confidence && promptConfidences.includes(confidence);

    // Il est pertinent de demander l'AMF uniquement lorsque l'utilisateur possède au moins
    // un facteur AMF inscrit.
    const canPromptMfa =
        event.user.multifactor && event.user.multifactor.length > 0;
    if (shouldPromptMfa && canPromptMfa) {
        api.multifactor.enable('any', { allowRememberBrowser: true });
    }
};
```

Pour afficher une invite aux utilisateurs, remplacez `api.multifactor.enable` par `api.authentication.challengeWithAny()` afin de forcer une demande MFA à l’aide d’un facteur existant auquel l’utilisateur est déjà inscrit. Pour consulter les facteurs pris en charge avec Actions, reportez-vous au [paramètre `factors`](https://auth0.com/docs/customize/actions/explore-triggers/signup-and-login-triggers/login-trigger/post-login-api-object#api-authentication-challengewithany-factors). Par exemple :

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  Cet exemple utilise `event.user.enrolledFactors` au lieu de `event.user.multifactor` pour vérifier l’enrôlement. Contrairement à `event.user.multifactor`, `event.user.enrolledFactors` inclut `email` comme facteur, et renvoie donc correctement les facteurs inscrits pour les utilisateurs qui ont seulement le courriel configuré.
</Callout>

```javascript theme={null}
// Il est pertinent de demander l’AMF uniquement lorsque l’utilisateur possède au moins un
// facteur AMF inscrit.
const canPromptMfa = event.user.enrolledFactors && event.user.enrolledFactors.length > 0;

if (shouldPromptMfa && canPromptMfa) {
    api.authentication.challengeWithAny([ {type: "email"}, {type:"phone"} ]);
}
```

<div id="require-mfa-enrollment-template">
  ### Modèle Require AMF Enrôlement
</div>

Ce modèle montre comment imposer l’enrôlement à l’AMF lorsque vous utilisez une politique AMF standard ou Adaptive MFA. Il utilise `event.user.multifactor` pour vérifier si l’utilisateur est inscrit à l’AMF et, dans le cas contraire, l’invite à s’inscrire.

```javascript lines theme={null}
/**
* Handler qui sera appelé lors de l'exécution d'un flow PostLogin.
*
* @param {Event} event - Détails sur l'utilisateur et le contexte dans lequel il se connecte.
* @param {PostLoginAPI} api - Interface dont les méthodes peuvent être utilisées pour modifier le comportement du login.
*/
exports.onExecutePostLogin = async (event, api) => {
    if (!event.user.multifactor?.length) {
        api.multifactor.enable('any', { allowRememberBrowser: false });
    }
};
```

<div id="action-use-cases">
  ## Cas d’utilisation d’Action
</div>

Voici quelques suggestions pour créer des Actions personnalisées selon votre cas d’utilisation.

<AccordionGroup>
  <Accordion title="Exécuter une action si le score de confiance global est X">
    Évaluez la propriété `riskAssessment.confidence`, puis comparez-la aux constantes `high`, `medium` ou `low` :

    ```js lines theme={null}
    exports.onExecutePostLogin = async (event, api) => {
      const { riskAssessment } = event.authentication || {};
      const riskIsMedium = riskAssessment && riskAssessment.confidence === 'medium';

      if (riskIsMedium) {
        // ....
      }
    }
    ```
  </Accordion>

  <Accordion title="Exécuter une action si le score de confiance est supérieur ou inférieur à X">
    Les scores de confiance sont des valeurs discrètes — et non des valeurs sur une plage — donc vous ne pouvez pas utiliser d’opérateurs de comparaison (comme `<` ou `>`) pour évaluer plusieurs valeurs dans une seule condition.

    Utilisez plusieurs conditions pour combiner logiquement tous les scores de confiance que vous voulez traiter. Par exemple, si vous voulez savoir quand le score de confiance est supérieur à `low`, vérifiez s’il est égal à `medium` ou `high` :

    ```js lines theme={null}
    exports.onExecutePostLogin = async (event, api) => {
      const { riskAssessment } = event.authentication || {};
      const riskIsMediumOrHigh = riskAssessment && 
                                      (riskAssessment.confidence === 'high' || 
                                       riskAssessment.confidence === 'medium');

      if (riskIsMediumOrHigh) {
        // ...
      }
    }
    ```
  </Accordion>

  <Accordion title="Obtenir des détails supplémentaires si le score de confiance global est X">
    L’objet `riskAssessment` est enregistré dans les journaux de votre tenant. Vous pouvez consulter les entrées de journal pour voir le score d’évaluation du risque et les facteurs déterminants (raisons).

    Vous pouvez consulter l’objet `riskAssessment` et transmettre les résultats ailleurs. Par exemple, vous pouvez envoyer un courriel ou enregistrer une entrée dans une base de données externe.

    ```js lines theme={null}
    exports.onExecutePostLogin = async (event, api) => {
      const { riskAssessment } = event.authentication || {};
      const riskIsLow = riskAssessment && riskAssessment.confidence === 'low';

      if (riskIsLow) {
        // log(externalDatabase, riskAssessment);
      }
    }
    ```
  </Accordion>

  <Accordion title="Exécuter une action si une évaluation précise produit un résultat précis">
    Utilisez l’[`objet assessments`](/docs/fr-ca/customize/actions/explore-triggers/signup-and-login-triggers/login-trigger/post-login-event-object#param-assessments) pour accéder aux détails de chaque évaluation, y compris la propriété `code` :

    ```js lines theme={null}
    exports.onExecutePostLogin = async (event, api) => {
      const { riskAssessment } = event.authentication || {};
      const { ImpossibleTravel } = riskAssessment && riskAssessment.assessments;

      if (ImpossibleTravel.code === 'impossible_travel_from_last_login') {
        // ...
      }
    }
    ```
  </Accordion>

  <Accordion title="Agréger les évaluations pour obtenir un score de confiance global personnalisé.">
    Utilisez l’[`objet assessments`](/docs/fr-ca/customize/actions/explore-triggers/signup-and-login-triggers/login-trigger/post-login-event-object#param-assessments) pour accéder aux détails de chaque évaluation, puis utilisez la propriété `confidence`, la propriété `code` ou les deux.
  </Accordion>

  <Accordion title="Bloquer la transaction en cours et renvoyer une erreur et un message si une évaluation précise produit un résultat précis">
    Utilisez l’[`objet assessments`](/docs/fr-ca/customize/actions/explore-triggers/signup-and-login-triggers/login-trigger/post-login-event-object#param-assessments) pour accéder aux détails de chaque évaluation, y compris la propriété `code`.

    Bloquez la transaction de connexion en empêchant son achèvement et en renvoyant la fonction de rappel avec un objet `UnauthorizedError` comme paramètre d’erreur. L’objet `UnauthorizedError` définit toujours `error` sur `unauthorized`, mais vous pouvez personnaliser `error_message` :

    ```js lines theme={null}
    exports.onExecutePostLogin = async (event, api) => {
      const { riskAssessment } = event.authentication || {};
      const { ImpossibleTravel } = riskAssessment && riskAssessment.assessments;

      if (ImpossibleTravel.code === 'impossible_travel_from_last_login') {
        return api.access.deny('Connexion bloquée en raison d’un déplacement impossible détecté.')
      }
    }
    ```

    Cela redirige l’utilisateur vers l’URL de rappel de l’application avec les paramètres `error` et `error_message`.
  </Accordion>

  <Accordion title="Gérer de façon sécuritaire les cas où Auth0 n’arrive pas à exécuter les évaluations">
    Auth0 attribue automatiquement un score de confiance `low` si l’évaluation du risque échoue, quelle qu’en soit la raison.

    Pour atténuer ce scénario, utilisez l’[`objet assessments`](/docs/fr-ca/customize/actions/explore-triggers/signup-and-login-triggers/login-trigger/post-login-event-object#param-assessments) pour examiner la propriété `code` de chaque évaluation et vérifier si la valeur est définie sur `assessment_not_available`.
  </Accordion>
</AccordionGroup>

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

* [Activer Adaptive MFA](/docs/fr-ca/secure/multi-factor-authentication/adaptive-mfa/enable-adaptive-mfa)
* [Événements de journalisation d’Adaptive MFA](/docs/fr-ca/secure/multi-factor-authentication/adaptive-mfa/adaptive-mfa-log-events)
* [Déclencheurs d’Actions : post-login - objet API](/docs/fr-ca/customize/actions/explore-triggers/signup-and-login-triggers/login-trigger/post-login-api-object)
* [Déclencheurs d’Actions : post-login - objet d’événement](/docs/fr-ca/customize/actions/explore-triggers/signup-and-login-triggers/login-trigger/post-login-event-object)
