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

# Personnaliser l’authentification multifacteur (MFA) adaptative

> Découvrez comment personnaliser l'Authentification multifacteur (MFA).

Vous pouvez personnaliser l’authentification multifacteur (<Tooltip href="/docs/fr-ca/glossary?term=multifactor-authentication" tip="Authentification multifacteur (MFA)
Processus d’authentification de l’utilisateur qui utilise un facteur en plus du nom d’utilisateur et du mot de passe, tel qu’un code par SMS." cta="Voir le glossaire">MFA</Tooltip>) adaptative pour une variété de scénarios avec [Auth0 Actions](/docs/fr-ca/customize/actions).

## Quand personnaliser l’authentification multifacteur (MFA) adaptative

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  Vous ne devez envisager de personnaliser l’authentification multifacteur (MFA) adaptative que si vos utilisateurs sont inscrits à la MFA et doivent utiliser une adresse électronique comme identifiant.
</Callout>

Si vos utilisateurs ne sont pas inscrits à la MFA, vous devriez utiliser l’autorisation par défaut pour l’authentification multifacteur (MFA) adaptative. Si un utilisateur n’est pas inscrit à la MFA et que votre action évalue le risque comme étant élevé, vous avez très peu d’options pour arrêter un acteur menaçant.

Avant de commencer à personnaliser l’authentification multifacteur (MFA) adaptative, posez-vous quelques questions :

* À quel niveau de confiance souhaitez-vous déclencher la MFA?
* Comment voulez-vous mesurer le risque?
* Voulez-vous qu’Auth0 mesure la confiance ou souhaitez-vous une mesure personnalisée?
* Comment allez-vous gérer les utilisateurs qui ne sont pas inscrits à la MFA?

## Évaluer la confiance

L’authentification multifacteur (MFA) adaptative calcule un pointage total de la confiance basé sur l’analyse de trois évaluations. Chaque évaluation a son propre pointage de confiance. Pour en savoir plus, consultez [Adaptive MFA](/docs/fr-ca/secure/multi-factor-authentication/adaptive-mfa).

### Pointages de confiance

Les pointages de confiance et leurs actions associées sont décrits ci-dessous :

| Pointage de confiance | Description                                                                                                  | Action                                    |
| --------------------- | ------------------------------------------------------------------------------------------------------------ | ----------------------------------------- |
| `low`                 | La transaction de connexion ne correspond pas aux modèles affichés précédemment par l’utilisateur.           | Exiger MFA.                               |
| `medium`              | La transaction de connexion correspond en quelque sorte aux modèles affichés précédemment par l’utilisateur. | Ne pas exiger MFA.                        |
| `high`                | La transaction de connexion correspond étroitement aux modèles précédemment affichés par l’utilisateur.      | Ne pas exiger MFA.                        |
| `neutral`             | N/A. Réservé pour une utilisation future.                                                                    | N/A. Réservé pour une utilisation future. |

### Pointage de confiance personnalisé

Si vous souhaitez implémenter votre propre méthode pour évaluer le pointage de confiance total de différents scénarios, vous pouvez utiliser les données dises dans l’objet [RiskAssessment](#riskassessment-context-object).

Consultez les exemples ci-dessous pour découvrir comment l’authentification multifacteur (MFA) adaptative évalue la confiance dans différents cas d’utilisation.

#### Exemples de scénarios à haut risque et à faible confiance

Le tableau suivant décrit les scénarios à haut risque qui entraînent un `low` pointage de confiance :

| État de l'utilisateur | Friction de connexion souhaitée             | Politique d'inscription souhaitée                                         | Mise en œuvre                                                           |
| --------------------- | ------------------------------------------- | ------------------------------------------------------------------------- | ----------------------------------------------------------------------- |
| Inscrit dans MFA      | Ne pas exiger le MFA                        | S.O. (utilisateur déjà inscrit)                                           | Utiliser une action pour contourner le MFA                              |
| Non inscrit dans MFA  | Exiger une vérification par courriel        | Passer l'inscription (ne pas collecter d'authentifiants additionnels)     | Comportement par défaut (aucune action liée à MFA)                      |
| Inscrit dans MFA      | Ne pas exiger d'authentifiants additionnels | Ne pas utiliser d'action liée à MFA)                                      |                                                                         |
| Non inscrit à MFA     | Exiger la vérification du courriel          | Exiger l'inscription à MFA (collecter des authentifiants supplémentaires) | Utiliser une action pour forcer l'inscription à MFA (modèle disponible) |

#### Exemples de scénarios à haut risque et à forte confiance

Le tableau suivant décrit les scénarios à faible risque qui entraînent un pointage `high` de confiance :

| État de l'utilisateur            | Friction de connexion souhaitée | Politique d'inscription souhaitée                                        | Mise en œuvre                                                              |
| -------------------------------- | ------------------------------- | ------------------------------------------------------------------------ | -------------------------------------------------------------------------- |
| Inscrit à l'authentification MFA | Pas de friction                 | S.O. (utilisateur déjà inscrit)                                          | Comportement par défaut (pas d'action liée à l'AMF)                        |
| Pas inscrit à la MFA             | Pas de friction                 | Sauter l'inscription (ne pas collecter d'authentifiants supplémentaires) | Comportement par défaut (pas d'action liée à la MFA)                       |
| Pas inscrit à la MFA             | Pas de friction                 | Exiger l'inscription à l'AMF (collecter un authentifiant supplémentaire) | Utiliser une action pour forcer l'inscription à la MFA (modèle disponible) |

### Objet riskAssessment

L’objet `riskAssessment` contient le pointage de confiance total, les informations de version et les détails des évaluations individuelles.

| Propriété     | Description                                                                             | Type   | Valeurs possibles                             |
| ------------- | --------------------------------------------------------------------------------------- | ------ | --------------------------------------------- |
| `confidence`  | Score de confiance global calculé par l’authentification multifacteur (MFA) adaptative. | chaîne | `low`, `medium`, `high`, `neutral`            |
| `version`     | Identifiant de version de l’API d’évaluation des risques.                               | chaîne | `1`                                           |
| `assessments` | Objet contenant les détails d’une évaluation individuelle.                              | objet  | Lire [objet évaluations](#assessments-object) |

```js lines expandable theme={null}
exports.onExecutePostLogin = async (event, api) => {
  if (event.authentication && event.authentication.riskAssessment) {
    event.authentication.riskAssessment = {
      confidence: 'low' | 'medium' | 'high' | 'neutral',
      version: '1',
      assessments: {
        UntrustedIP: {
          confidence: 'low' | 'medium' | 'high' | 'neutral',
          code: 'not_found_on_deny_list' | 'found_on_deny_list',
          details: { // only if 'found_on_deny_list'
            ip: '192.168.1.1',
            matches: '192.168.0/64',
            source: 'firehol',
            category: 'abuse'
          }
        },
        NewDevice: {
          confidence: 'low' | 'medium' | 'high' | 'neutral',
          code: 'match' | 'partial_match' | 'no_match',
          details: {
            device: 'known' | 'unknown',
            useragent: 'known' | 'unknown',
          }
        },
        ImpossibleTravel: {
          confidence: 'low' | 'medium' | 'high' | 'neutral',
          code: 'missing_geoip', | 'anonymous_proxy' | 'unknown_location' | 'initial_login' | 'location_history_not_found' | 'invalid_travel' | 'minimal_travel_from_last_login' | 'impossible_travel_from_last_login' | 'substantial_travel_from_last_login' | 'travel_from_last_login'
        } 
      },
       PhoneNumber: {
          code: "requires_verification | ok",
          confidence: "low | medium | high | neutral",
          details: {
	        	lineType: "FIXED_LINE | MOBILE | FIXED_LINE_OR_MOBILE | TOLL_FREE | PREMIUM_RATE | SHARED_COST | VOIP | PERSONAL_NUMBER | PAGER | UAN | UNKNOWN"
	            isValid: true | false,
		        countryCode: 1,
		        number: "+12223334444"
        }
      }
    };
  }
}
```

### Objet assessments

L’objet `assessments` contient des détails sur les trois évaluations de risques individuelles :

1. [Évaluation NewDevice](#newdevice-assessment)
2. [Évaluation ImpossibleTravel](#impossibletravel-assessment)
3. [Évaluation UntrustedIP](#untrustedip-assessment)
4. [Évaluation PhoneNumber](#phonenumber-assessment)

Chaque évaluation comprend un [pointage de confiance](#confidence-scores), un code qui décrit le résultat de l’évaluation et des informations contextuelles supplémentaires.

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  Dans le cas improbable d’une défaillance du système dorsal d’évaluation, le code de l’évaluation sera `assessment_not_available` et la confiance associée sera `low` car Auth0 adopte par défaut un comportement sécurisé. Vous pouvez remplacer cette notation à l’aide d’Actions. Pour en savoir plus, lisez [Gérer en toute sécurité les cas où Auth0 ne parvient pas à exécuter les évaluateurs](#safely-handle-when-auth0-fails-execute-assessors).
</Callout>

#### Évaluation NewDevice

L’évaluation `NewDevice` détermine si l’utilisateur se connecte à partir d’un appareil connu et contient les propriétés suivantes :

| Propriété    | Description                                                                         | Type   | Valeurs possible                                                                                                         |
| ------------ | ----------------------------------------------------------------------------------- | ------ | ------------------------------------------------------------------------------------------------------------------------ |
| `confidence` | Pointage de confiance calculé par l’authentification multifacteur (MFA) adaptative. | chaîne | `low`, `medium`, `high`, `neutral`                                                                                       |
| `code`       | Résultat de l’évaluation.                                                           | chaîne | `match`, `partial_match`, `no_match`, `initial_login`, `unknown_device`, `no_device_history`, `assessment_not_available` |
| `details`    | Renseignements contextuels supplémentaires.                                         | objet  | Voir le tableau ci-dessous.                                                                                              |

##### Propriété du code d’évaluation NewDevice

La propriété du `code` d’évaluation `NewDevice` est égale à l’une des valeurs suivantes :

| Valeur                     | Description                                                        |
| -------------------------- | ------------------------------------------------------------------ |
| `match`                    | Les valeurs de propriété de l’objet `details` sont équivalentes.   |
| `partial_match`            | Les valeurs de propriété de l’objet `details` sont similaires.     |
| `no_match`                 | Les valeurs de propriété de l’objet `details` sont différentes.    |
| `initial_login`            | L’utilisateur s’est connecté pour la première fois sur l’appareil. |
| `unknown_device`           | Auth0 n’a pas pu obtenir les métadonnées de l’appareil.            |
| `no_device_history`        | Il n’y a pas d’historique de connexion associé à l’appareil.       |
| `assessment_not_available` | Auth0 n’a pas pu effectuer une évaluation de l’appareil.           |

##### Objet de détails d’évaluation NewDevice

Si la valeur de la propriété du `code` équivaut à `match`, `partial_match` ou `no_match`, l’évaluation `NewDevice` contient l’objet `details` avec les propriétés suivantes :

| Propriété   | Description                | Type   | Valeurs admises    |
| ----------- | -------------------------- | ------ | ------------------ |
| `device`    | Appareil de l’utilisateur. | string | `known`, `unknown` |
| `useragent` | Agent utilisateur.         | string | `known`, `unknown` |

#### Évaluation ImpossibleTravel

L’évaluation `ImpossibleTravel` détermine si l’utilisateur se connecte à partir d’un emplacement qui pourrait indiquer un possible déplacement et contient les propriétés suivantes :

| Propriété    | Description                                                                      | Type   | Valeurs possibles                                                                                                                                                                                                                                                                          |
| ------------ | -------------------------------------------------------------------------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `confidence` | Score de confiance calculé par l'authentification multifacteur (MFA) adaptative. | chaîne | `low`, `medium`, `high`, `neutral`                                                                                                                                                                                                                                                         |
| `code`       | Résultat de l’évaluation.                                                        | chaîne | `minimal_travel_from_last_login`, `travel_from_last_login`, `substantial_travel_from_last_login`, `impossible_travel_from_last_login`, `invalid_travel`, `missing_geoip`, `anonymous_proxy`, `unknown_location`, `initial_login`, `location_history_not_found`, `assessment_not_available` |

#### Évaluation UntrustedIP

L’évaluation `UntrustedIP` détermine si l’adresse IP de l’utilisateur est présente dans le référentiel d’adresses IP de faible réputation d’Auth0 (« liste de refus ») et contient les propriétés suivantes :

| Propriété    | Description                                                                      | Type   | Valeurs possibles                                                                                |
| ------------ | -------------------------------------------------------------------------------- | ------ | ------------------------------------------------------------------------------------------------ |
| `confidence` | Score de confiance calculé par l’authentification multifacteur (MFA) adaptative. | chaîne | `low`, `medium`, `high`, `neutral`                                                               |
| `code`       | Résultat de l’évaluation.                                                        | chaîne | `not_found_on_deny_list`, `found_on_deny_list`, `invalid_ip_address`, `assessment_not_available` |
| `details`    | Informations contextuelles supplémentaires.                                      | object | Voir le tableau ci-dessous.                                                                      |

##### Objet de détails d’évaluation UntrustedIP

Si la valeur de la propriété du `code` d’évaluation `UntrustedIP` est égale à `found_on_deny_list`, l’objet `details` est présent et contient les propriétés suivantes :

| Property   | Description                                                                | Type   | Possible values                                                 |
| ---------- | -------------------------------------------------------------------------- | ------ | --------------------------------------------------------------- |
| `ip`       | Adresse IP de l'appareil.                                                  | string | Toute adresse IPv4 ou IPv6 valide.                              |
| `matches`  | Masque de sous-réseau auquel appartient l'adresse IP.                      | string | Tout masque de sous-réseau IPv4 ou IPv6 valide.                 |
| `source`   | Nom de la source de renseignements sur les menaces pour la liste de refus. | string | Tout texte valide.                                              |
| `category` | Catégorie indiquant pourquoi l'adresse IP n'est pas fiable.                | string | `abuse`, `anonymizer`, `datacenter`, `reputation`, `unroutable` |

##### Propriété de catégorie d’objet détails d’évaluation UntrustedIP

La propriété de `catégorie` d’objet `détails` d’évaluation `UntrustedIP` décrit la raison générale pour laquelle l’authentification multifacteur (MFA) adaptative considère une adresse IP donnée comme étant non fiable et est égale à l’une des valeurs suivantes :

| Valeur       | Description                                                                                                                             |
| ------------ | --------------------------------------------------------------------------------------------------------------------------------------- |
| `abuse`      | L’adresse IP a présenté des comportements abusifs ou a été identifiée comme étant membre de robots.                                     |
| `anonymizer` | L’adresse IP appartient à des services d’anonymisation tels que les fournisseurs de VPN, les proxys ouverts et les nœuds de sortie TOR. |
| `datacenter` | L’adresse IP appartient aux fournisseurs d’hébergement en nuage et aux centres de données de colocation.                                |
| `reputation` | L’adresse IP a un mauvais score de réputation basé sur l’activité.                                                                      |
| `unroutable` | L’adresse IP ne se trouve dans aucune plage allouée ou déléguée par un registre Internet autorisé ou autorisée pour un usage public.    |

#### Évaluation PhoneNumber

L’évaluation `PhoneNumber` évalue le risque qu’un numéro de téléphone représente pour une transaction entrante et contient les propriétés suivantes :

| Propriété    | Description                                                                      | Type   | Valeurs possibles                                                                      |
| ------------ | -------------------------------------------------------------------------------- | ------ | -------------------------------------------------------------------------------------- |
| `code`       | Décrit le résultat de l’évaluation.                                              | chaîne | `ok`, `requires_verification`, `phone_number_not_provided`, `assessment_not_available` |
| `confidence` | Score de confiance calculé par l’authentification multifacteur (MFA) adaptative. | chaîne | `low`, `medium`, `high`, `neutral`                                                     |
| `details`    | Informations contextuelles supplémentaires.                                      | object | Voir le tableau ci-dessous.                                                            |

##### Objet de détails d’évaluation PhoneNumber

L’objet de `details` d’évaluation `PhoneNumber` contient les propriétés suivantes :

| Propriété     | Description                         | Type    | Valeurs possible                                                                                                                                 |
| ------------- | ----------------------------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
| `lineType`    | Type de ligne téléphonique          | chaîne  | `FIXED_LINE`, `MOBILE`, `FIXED_LINE_OR_MOBILE`, `TOLL_FREE`, `PREMIUM_RATE`, `SHARED_COST`, `VOIP`, `PERSONAL_NUMBER`, `PAGER`, `UAN`, `UNKNOWN` |
| `isValid`     | Renvoie la validité du numéro       | booléen | `true`, `false`                                                                                                                                  |
| `countryCode` | Code du pays d’origine du téléphone | entier  | `0-999`                                                                                                                                          |
| `number`      | Numéro de téléphone                 | chaîne  | Numéro valide incluant `countryCode`                                                                                                             |

## Résultats des actions

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  Les actions qui déclenchent la MFA sont prioritaires sur le comportement par défaut de l’authentification multifacteur (MFA) adaptative.
</Callout>

Si l’une de vos actions déclenche la MFA en fonction du pointage de confiance, la stratégie Authentification multifacteur (MFA) adaptative par défaut déclenche la MFA lorsque le pointage de confiance est `low`.

Le tableau suivant montre les résultats possibles en fonction de la combinaison d’actions et d’actions d’autorisations de l’authentification multifacteur (MFA) adaptative par défaut.

| Résultat de l’action | Action Authentification multifacteur (MFA) adaptative | Résultat        |
| -------------------- | ----------------------------------------------------- | --------------- |
| Non autorisé         | Déclencher MFA                                        | Non autorisé    |
| Non autorisé         | MFA non requise                                       | Non autorisé    |
| Déclencher MFA       | Déclencher MFA                                        | Déclencher MFA  |
| Déclencher MFA       | MFA non requise                                       | Déclencher MFA  |
| MFA non requise      | Déclencher MFA                                        | Déclencher MFA  |
| MFA non requise      | MFA non requise                                       | MFA non requise |

## Modèles d’actions

Auth0 propose deux modèles d’actions basés sur l’authentification multifacteur (MFA) adaptative que vous pouvez personnaliser : [Authentification multifacteur (MFA) adaptative](#adaptive-mfa) et [Inscription à l’AMF requise](#require-mfa-enrollment).

### Modèle d’authentification multifacteur (MFA) adaptative

Ce modèle fournit un exemple et un point de départ sur la manière de créer un flux commercial personnalisé en utilisant des évaluations de risques individuelles.

```javascript lines expandable theme={null}
/**
* Handler that will be called during the execution of a PostLogin flow.
*
* @param {Event} event - Details about the user and the context in which they are logging in.
* @param {PostLoginAPI} api - Interface whose methods can be used to change the behavior of the login.
*/
exports.onExecutePostLogin = async (event, api) => {
  if (event.authentication && 
      event.authentication.riskAssessment && 
      event.authentication.riskAssessment.assessments.NewDevice) {

  // Example condition: prompt MFA only based on the NewDevice 
    // confidence level, this will prompt for MFA when a user is logging in 
    // from an unknown device.
    let shouldPromptMfa;

    switch (event.authentication.riskAssessment.assessments.NewDevice.confidence) {
      case 'low':
      case 'medium':
        shouldPromptMfa = true;
        break;
      case 'high':
        shouldPromptMfa = false;
        break;
      case 'neutral':
        // When this assessor has no useful information about the confidence, 
        // do not prompt MFA.
        shouldPromptMfa = false;
        break;
    }

      // It only makes sense to prompt for MFA when the user has at least one 
      // enrolled MFA factor.
    const canPromptMfa = event.user.multifactor && event.user.multifactor.length > 0;

    if (shouldPromptMfa && canPromptMfa) {
      api.multifactor.enable('any', { allowRememberBrowser: true });
    }
  }
};
```

### Exiger un modèle d’inscription à la MFA

Ce modèle montre comment vous pouvez appliquer l’inscription à la MFA lorsque vous utilisez une stratégie d’authentification multifacteur standard ou adaptative. Il utilise `event.user.multifactor` pour vérifier si l’utilisateur est inscrit à la MFA et, si ce n’est pas le cas, l’invite à le faire.

```javascript lines theme={null}
/**
* Handler that will be called during the execution of a PostLogin flow.
*
* @param {Event} event - Details about the user and the context in which they are logging in.
* @param {PostLoginAPI} api - Interface whose methods can be used to change the behavior of the login.
*/
exports.onExecutePostLogin = async (event, api) => {
  if (!event.user.multifactor || event.user.multifactor.length == 0) {
    api.multifactor.enable('any', { allowRememberBrowser: true });
  }
};
```

## Actions de cas d’utilisation

Voici quelques suggestions sur la manière de créer des actions personnalisées en fonction de votre cas d’utilisation.

### Effectuer une action si le pointage de confiance total 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) {
    // ....
  }
}
```

### Réaliser une action si le pointage de confiance est supérieur ou inférieur à X

Les pointages de confiance sont des valeurs discrètes (et non comprises dans une gamme); vous ne pouvez donc pas utiliser d’opérateurs de comparaison (tels que `<` ou `>`) pour évaluer plusieurs valeurs dans une seule condition.

Utilisez plusieurs conditions pour combiner logiquement tous les pointages de confiance que vous souhaitez gérer. Par exemple, si vous souhaitez savoir quand le pointage de confiance est plus élevé que `low`, vérifiez s’il est égale à `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) {
    // ...
  }
}
```

### Obtenir des détails supplémentaires si le pointage de confiance total est X

L’objet `riskAssessment` est enregistré dans vos journaux de locataire. Vous pouvez afficher les entrées du journal pour voir le pointage d’évaluation des risques et les facteurs déterminants (raisons).

Vous pouvez afficher l’objet `riskAssessment` et signaler les résultats à un autre endroit. Par exemple, vous pouvez envoyer un courriel ou sauvegarder un enregistrement 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);
  }
}
```

### Réaliser une action si une évaluation donnée a un résultat donné

Utilisez l’objet [assessments](#assessments-object) pour accéder aux détails des évaluations individuelles, y compris la propriété du `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') {
    // ...
  }
}
```

### Regroupez les évaluations pour obtenir un pointage de confiance total personnalisé.

Utilisez l’objet [assessments](#assessments-object) pour accéder aux détails des évaluations individuelles, puis utilisez la propriété `confidence`, la propriété du `code`, ou les deux.

Pour en savoir plus sur le pointage de confiance personnalisé, consultez [Pointage de confiance personnalisé](#custom-confidence-scoring).

### Bloquer la transaction en cours et renvoyer une erreur et un message si une évaluation donnée a un résultat donné

Utilisez l’objet [assessments](#assessments-object) pour accéder aux détails des évaluations individuelles, y compris la propriété du `code`.

Empêchez la transaction de connexion de se terminer en renvoyant la fonction de rappel avec un objet `UnauthorizedError` comme [paramètre d’erreur](/docs/fr-ca/troubleshoot/error-handling-best-practices). L’objet `UnauthorizedError` définit toujours `error` sur `unauthorized`, mais vous pouvez personnaliser le`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('Login blocked due to impossible travel detected.')
  }
}
```

Ceci redirige l’utilisateur vers l’URL de rappel de l’application avec les paramètres `error` et `error_message` inclus.

### Gérer en toute sécurité les cas où Auth0 ne parvient pas à exécuter les évaluations

Auth0 attribue automatiquement un pointage de confiance `low` en cas d’échec de l’évaluation des risques.

Pour mitiger ce scénario, utilisez l’objet [assessments](#assessments-object) pour inspecter la propriété du `code` pour chaque évaluation individuelle et vérifier si la valeur est définie sur `assessment_not_available`.

## En savoir plus

* [Activer l’authentification multifacteur (MFA) adaptative](/docs/fr-ca/secure/multi-factor-authentication/adaptive-mfa/enable-adaptive-mfa)
* [Événements de journal Authentification multifacteur (MFA) adaptative](/docs/fr-ca/secure/multi-factor-authentication/adaptive-mfa/adaptive-mfa-log-events)
* [Déclencheurs d’actions : post-connexion - Objet API](/docs/fr-ca/customize/actions/explore-triggers/signup-and-login-triggers/login-trigger/post-login-api-object)
* [Déclencheurs d’actions : post-connexion – Objet d’événement](/docs/fr-ca/customize/actions/explore-triggers/signup-and-login-triggers/login-trigger/post-login-event-object)
