Passer au contenu principal
Vous pouvez personnaliser pour divers scénarios avec Auth0 Actions.

Quand personnaliser Adaptive MFA

Vous ne devriez envisager de personnaliser Adaptive MFA que si vos utilisateurs sont déjà inscrits à la MFA et doivent utiliser un courriel comme identifiant.
Si vos utilisateurs ne sont pas inscrits à la , vous devriez utiliser la stratégie par défaut d’Adaptive MFA. Si un utilisateur n’est pas inscrit à la MFA et que votre Action évalue un risque élevé, vous disposez de peu d’options pour bloquer un . Avant de commencer à personnaliser Adaptive MFA, posez-vous quelques questions :
  • À quel niveau de confiance voulez-vous déclencher la MFA ?
  • Comment voulez-vous mesurer le risque ?
  • Voulez-vous qu’Auth0 mesure le niveau de confiance ou préférez-vous une mesure personnalisée ?
  • Comment allez-vous gérer les utilisateurs qui ne sont pas inscrits à la MFA ?

Scores de confiance

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. Chaque évaluation possède son propre score de confiance, et chaque score de confiance a une action associée :
Score de confianceDescriptionAction
lowLa tentative de connexion ne correspond pas aux habitudes observées précédemment chez l’utilisateur.Exiger la MFA.
mediumLa tentative de connexion correspond en partie aux habitudes observées précédemment chez l’utilisateur.Ne pas exiger la MFA.
highLa tentative de connexion correspond étroitement aux habitudes observées précédemment chez l’utilisateur.Ne pas exiger la MFA.
neutralS.O. Réservé à une utilisation future.S.O. Réservé à une utilisation future.
Le tableau suivant décrit les scénarios à risque élevé qui produisent un score de confiance low :
État de l’utilisateurNiveau de friction souhaité à la connexionPolitique d’inscription souhaitéeImplémentation
Inscrit à la MFANe pas exiger la MFAS.O. (utilisateur déjà inscrit)Utiliser une Action pour contourner la MFA
Non inscrit à la MFAExiger la vérification du courrielNe pas effectuer l’inscription (ne pas demander de facteur d’authentification supplémentaire)Comportement par défaut (aucune Action liée à la MFA)
Non inscrit à la MFAExiger la vérification du courrielExiger l’inscription à la MFA (demander un facteur d’authentification supplémentaire)Utiliser une Action pour forcer l’inscription à la MFA (modèle disponible)
Le tableau suivant décrit les scénarios à faible risque qui produisent un score de confiance high :
État de l’utilisateurNiveau de friction souhaité à la connexionPolitique d’inscription souhaitéeImplémentation
Inscrit à la MFAAucune frictionS.O. (utilisateur déjà inscrit)Comportement par défaut (aucune Action liée à la MFA)
Non inscrit à la MFAAucune frictionNe pas effectuer l’inscription (ne pas demander de facteur d’authentification supplémentaire)Comportement par défaut (aucune Action liée à la MFA)
Non inscrit à la MFAAucune frictionExiger l’inscription à la MFA (demander un facteur d’authentification supplémentaire)Utiliser une Action pour forcer l’inscription à la MFA (modèle disponible)
Si vous souhaitez implémenter 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, les informations de version 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 des Actions.

Résultats possibles des Actions

Les Actions qui déclenchent la MFA priment sur le comportement Adaptive MFA par défaut.
Si l’une de vos Actions déclenche la MFA en fonction du score de confiance, la stratégie Adaptive MFA par défaut déclenche la MFA 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 stratégie Adaptive MFA par défaut.
Résultat de l’ActionAction d’Adaptive MFARésultat
Non autoriséDéclencher la MFANon autorisé
Non autoriséAucune MFA requiseNon autorisé
Déclencher la MFADéclencher la MFADéclencher la MFA
Déclencher la MFAAucune MFA requiseDéclencher la MFA
Aucune MFA requiseDéclencher la MFADéclencher la MFA
Aucune MFA requiseAucune MFA requiseAucune MFA requise

Modèles d’Action

Auth0 fournit deux modèles d’Action fondés sur Adaptive MFA que vous pouvez personnaliser : Adaptive MFA et Exiger l’inscription à l’authentification multifacteur (MFA).

Modèle Adaptive MFA

Ce modèle fournit un exemple et un point de départ pour créer un flux métier personnalisé à l’aide d’évaluations individuelles des risques. Cet exemple utilise :
  • Le déclencheur Action api.multifactor.enable pour gérer à la fois l’inscription et le déclenchement des défis MFA configurés à la fin du processus de connexion.
  • Le déclencheur Actions event.user.multifactor avec les facteurs auxquels l’utilisateur est inscrit.
Comme les notifications par email ne constituent pas un facteur indépendant, la condition event.user.multifactor && event.user.multifactor.length > 0 renverra false si l’utilisateur n’a que le facteur email. Pour en savoir plus, consultez Configurer les notifications par courriel pour MFA.
/**
* Gestionnaire qui sera appelé lors de l'exécution d'un flux 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 de la connexion.
*/
exports.onExecutePostLogin = async (event, api) => {
    // Déterminer quels scores de confiance doivent déclencher la MFA; pour plus d'informations, consulter
    const promptConfidences = ['low', 'medium'];

    // Exemple de condition : demander la MFA uniquement en fonction du niveau de confiance
    // NewDevice; cela déclenchera la MFA 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 la MFA uniquement lorsque l'utilisateur possède au moins un
    // facteur MFA 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 un défi MFA avec un facteur existant déjà configuré par l’utilisateur. Pour consulter les facteurs pris en charge avec Actions, reportez-vous au paramètre factors. Par exemple :
Cet exemple utilise event.user.enrolledFactors au lieu de event.user.multifactor pour vérifier l’inscription aux facteurs. Contrairement à event.user.multifactor, event.user.enrolledFactors inclut email comme facteur, ce qui permet de retourner correctement les facteurs configurés pour les utilisateurs qui n’ont configuré que le courriel.
// Cela n'a de sens d'inviter à la MFA que lorsque l'utilisateur a au moins un
// facteur MFA inscrit.
const canPromptMfa = event.user.enrolledFactors && event.user.enrolledFactors.length > 0;

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

Modèle d’exigence d’inscription à la MFA

Ce modèle montre comment imposer l’inscription à la MFA lorsque vous utilisez une stratégie MFA standard ou Adaptive. Il utilise event.user.multifactor pour vérifier si l’utilisateur est inscrit à la MFA et, si ce n’est pas le cas, lui demander de s’inscrire.
/**
* Gestionnaire qui sera appelé lors de l'exécution d'un flux 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 de la connexion.
*/
exports.onExecutePostLogin = async (event, api) => {
    if (!event.user.multifactor?.length) {
        api.multifactor.enable('any', { allowRememberBrowser: false });
    }
};

Cas d’utilisation des Actions

Voici quelques suggestions pour créer des Actions personnalisées en fonction de votre cas d’utilisation.
É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) {
    // ....
  }
}
Les scores de confiance sont des valeurs discrètes, et non des valeurs dans une plage. Vous ne pouvez donc pas utiliser des 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 souhaitez 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 :
exports.onExecutePostLogin = async (event, api) => {
  const { riskAssessment } = event.authentication || {};
  const riskIsMediumOrHigh = riskAssessment && 
                                  (riskAssessment.confidence === 'high' || 
                                   riskAssessment.confidence === 'medium');

  if (riskIsMediumOrHigh) {
    // ...
  }
}
L’objet riskAssessment est enregistré dans les journaux de votre locataire. 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 à un autre système. Par exemple, vous pouvez envoyer un courriel ou enregistrer 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);
  }
}
Utilisez l’objet assessments pour accéder aux détails de chaque évaluation, y compris la propriété code :
exports.onExecutePostLogin = async (event, api) => {
  const { riskAssessment } = event.authentication || {};
  const { ImpossibleTravel } = riskAssessment && riskAssessment.assessments;

  if (ImpossibleTravel.code === 'impossible_travel_from_last_login') {
    // ...
  }
}
Utilisez l’objet assessments pour accéder aux détails de chaque évaluation, puis utilisez la propriété confidence, la propriété code ou les deux.
Utilisez l’objet assessments pour accéder aux détails de chaque évaluation, y compris la propriété 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 error_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('Connexion bloquée en raison d’un voyage impossible détecté.')
  }
}
L’utilisateur est alors redirigé vers l’URL de rappel de l’application avec les paramètres error et error_message.
Auth0 attribue automatiquement un score de confiance low si une défaillance survient pendant l’évaluation du risque.Pour atténuer ce scénario, utilisez l’objet assessments pour vérifier la propriété code de chaque évaluation et déterminer si la valeur est définie sur assessment_not_available.

En savoir plus