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

Quand personnaliser l’authentification multifacteur (MFA) adaptative

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.
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 confianceDescriptionAction
lowLa transaction de connexion ne correspond pas aux modèles affichés précédemment par l’utilisateur.Exiger MFA.
mediumLa transaction de connexion correspond en quelque sorte aux modèles affichés précédemment par l’utilisateur.Ne pas exiger MFA.
highLa transaction de connexion correspond étroitement aux modèles précédemment affichés par l’utilisateur.Ne pas exiger MFA.
neutralN/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’utilisateurFriction de connexion souhaitéePolitique d’inscription souhaitéeMise en œuvre
Inscrit dans MFANe pas exiger le MFAS.O. (utilisateur déjà inscrit)Utiliser une action pour contourner le MFA
Non inscrit dans MFAExiger une vérification par courrielPasser l’inscription (ne pas collecter d’authentifiants additionnels)Comportement par défaut (aucune action liée à MFA)
Inscrit dans MFANe pas exiger d’authentifiants additionnelsNe pas utiliser d’action liée à MFA)
Non inscrit à MFAExiger la vérification du courrielExiger 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’utilisateurFriction de connexion souhaitéePolitique d’inscription souhaitéeMise en œuvre
Inscrit à l’authentification MFAPas de frictionS.O. (utilisateur déjà inscrit)Comportement par défaut (pas d’action liée à l’AMF)
Pas inscrit à la MFAPas de frictionSauter l’inscription (ne pas collecter d’authentifiants supplémentaires)Comportement par défaut (pas d’action liée à la MFA)
Pas inscrit à la MFAPas de frictionExiger 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éDescriptionTypeValeurs possibles
confidenceScore de confiance global calculé par l’authentification multifacteur (MFA) adaptative.chaînelow, medium, high, neutral
versionIdentifiant de version de l’API d’évaluation des risques.chaîne1
assessmentsObjet contenant les détails d’une évaluation individuelle.objetLire 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"
        }
      }
    };
  }
}

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

É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éDescriptionTypeValeurs possible
confidencePointage de confiance calculé par l’authentification multifacteur (MFA) adaptative.chaînelow, medium, high, neutral
codeRésultat de l’évaluation.chaînematch, partial_match, no_match, initial_login, unknown_device, no_device_history, assessment_not_available
detailsRenseignements contextuels supplémentaires.objetVoir 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 :
ValeurDescription
matchLes valeurs de propriété de l’objet details sont équivalentes.
partial_matchLes valeurs de propriété de l’objet details sont similaires.
no_matchLes valeurs de propriété de l’objet details sont différentes.
initial_loginL’utilisateur s’est connecté pour la première fois sur l’appareil.
unknown_deviceAuth0 n’a pas pu obtenir les métadonnées de l’appareil.
no_device_historyIl n’y a pas d’historique de connexion associé à l’appareil.
assessment_not_availableAuth0 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éDescriptionTypeValeurs admises
deviceAppareil de l’utilisateur.stringknown, unknown
useragentAgent utilisateur.stringknown, 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éDescriptionTypeValeurs possibles
confidenceScore de confiance calculé par l’authentification multifacteur (MFA) adaptative.chaînelow, medium, high, neutral
codeRésultat de l’évaluation.chaîneminimal_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éDescriptionTypeValeurs possibles
confidenceScore de confiance calculé par l’authentification multifacteur (MFA) adaptative.chaînelow, medium, high, neutral
codeRésultat de l’évaluation.chaînenot_found_on_deny_list, found_on_deny_list, invalid_ip_address, assessment_not_available
detailsInformations contextuelles supplémentaires.objectVoir 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 :
PropertyDescriptionTypePossible values
ipAdresse IP de l’appareil.stringToute adresse IPv4 ou IPv6 valide.
matchesMasque de sous-réseau auquel appartient l’adresse IP.stringTout masque de sous-réseau IPv4 ou IPv6 valide.
sourceNom de la source de renseignements sur les menaces pour la liste de refus.stringTout texte valide.
categoryCatégorie indiquant pourquoi l’adresse IP n’est pas fiable.stringabuse, 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 :
ValeurDescription
abuseL’adresse IP a présenté des comportements abusifs ou a été identifiée comme étant membre de robots.
anonymizerL’adresse IP appartient à des services d’anonymisation tels que les fournisseurs de VPN, les proxys ouverts et les nœuds de sortie TOR.
datacenterL’adresse IP appartient aux fournisseurs d’hébergement en nuage et aux centres de données de colocation.
reputationL’adresse IP a un mauvais score de réputation basé sur l’activité.
unroutableL’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éDescriptionTypeValeurs possibles
codeDécrit le résultat de l’évaluation.chaîneok, requires_verification, phone_number_not_provided, assessment_not_available
confidenceScore de confiance calculé par l’authentification multifacteur (MFA) adaptative.chaînelow, medium, high, neutral
detailsInformations contextuelles supplémentaires.objectVoir 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éDescriptionTypeValeurs possible
lineTypeType de ligne téléphoniquechaîneFIXED_LINE, MOBILE, FIXED_LINE_OR_MOBILE, TOLL_FREE, PREMIUM_RATE, SHARED_COST, VOIP, PERSONAL_NUMBER, PAGER, UAN, UNKNOWN
isValidRenvoie la validité du numérobooléentrue, false
countryCodeCode du pays d’origine du téléphoneentier0-999
numberNuméro de téléphonechaîneNuméro valide incluant countryCode

Résultats des actions

Les actions qui déclenchent la MFA sont prioritaires sur le comportement par défaut de l’authentification multifacteur (MFA) adaptative.
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’actionAction Authentification multifacteur (MFA) adaptativeRésultat
Non autoriséDéclencher MFANon autorisé
Non autoriséMFA non requiseNon autorisé
Déclencher MFADéclencher MFADéclencher MFA
Déclencher MFAMFA non requiseDéclencher MFA
MFA non requiseDéclencher MFADéclencher MFA
MFA non requiseMFA non requiseMFA 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 });
    }
  }
};

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

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) {
    // ....
  }
}

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) {
    // ...
  }
}

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

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

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

I