Personnaliser l’authentification multifacteur (MFA) adaptative

Vous pouvez personnaliser l’authentification multifacteur (MFA) adaptative pour une variété de scénarios avec Auth0 Actions.

Quand personnaliser l’authentification multifacteur (MFA) adaptative

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.

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.

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

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"
        }
      }
    };
  }
}

Was this helpful?

/

Objet assessments

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

  1. Évaluation NewDevice

  2. Évaluation ImpossibleTravel

  3. Évaluation UntrustedIP

  4. Évaluation PhoneNumber

Chaque évaluation comprend un pointage de confiance, un code qui décrit le résultat de l’évaluation et des informations contextuelles supplémentaires.

É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. | Toute adresse IPv4 ou IPv6 valide. | | matches | Masque de sous-réseau auquel appartient l’adresse IP. | Chaîne de caractères - 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. | chaîne de caractères | Tout texte valide. | | category | Catégorie indiquant pourquoi l’adresse IP n’est pas fiable. | Chaîne de caractères | 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

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 et Inscription à l’AMF requise.

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.

/**
* 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 });
    }
  }
};

Was this helpful?

/

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.

/**
* 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 });
  }
};

Was this helpful?

/

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 :

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

  if (riskIsMedium) {
    // ....
  }
}

Was this helpful?

/

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 :

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

  if (riskIsMediumOrHigh) {
    // ...
  }
}

Was this helpful?

/

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.

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

  if (riskIsLow) {
    // log(externalDatabase, riskAssessment);
  }
}

Was this helpful?

/

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

Utilisez l’objet assessments pour accéder aux détails des évaluations individuelles, y compris la propriété du code :

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

  if (ImpossibleTravel.code === 'impossible_travel_from_last_login') {
    // ...
  }
}

Was this helpful?

/

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

Utilisez l’objet assessments 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é.

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 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. L’objet UnauthorizedError définit toujours error sur unauthorized, mais vous pouvez personnaliser leerror_message :

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.')
  }
}

Was this helpful?

/

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