Personnaliser la sélection MFA pour la connexion universelle

Auth0 prend en charge une variété de facteurs pour sécuriser l’accès des utilisateurs avec grâce à l’authentification multifacteur (MFA). À l’aide des actions post-connexion, vous pouvez personnaliser vos flux MFA afin de proposer aux utilisateurs un facteur spécifique ou une séquence de facteurs. Vous pouvez également utiliser des informations contextuelles sur les utilisateurs et leurs organisations dans le but de créer des expériences plus individualisées. Par exemple, vous pouvez personnaliser vos flux pour mettre les utilisateurs au défi avec des facteurs spécifiques en fonction de leur appartenance à certaines organisations ou en fonction des rôles d’utilisateur qui leur sont attribués.

Fonctionnement

Vous pouvez utiliser Actions pour personnaliser vos flux MFA. Plus particulièrement, vous pouvez modifier le déclencheur post-connexion du Flux de connexion à l’aide des méthodes Authentication API suivantes :

  • challengeWith : Spécifie le ou les facteurs que les utilisateurs doivent utiliser pour s’authentifier, comme un mot de passe à usage unique. Cette méthode présente un défi par défaut aux utilisateurs et peut donner éventuellement accès à un sélecteur de facteurs qui leur permet de choisir une méthode d’authentification différente.

  • challengeWithAny : Définit un groupe de facteurs parmi lesquels les utilisateurs peuvent choisir au moment de l’authentification, tels que le courriel et le mot de passe à usage unique. Par défaut, cette méthode présente aux utilisateurs un sélecteur de facteurs plutôt qu’un défi spécifique, conformément aux conditions suivantes :

    • Si deux facteurs ou plus sont spécifiés, un sélecteur de facteurs s’affiche pour l’utilisateur.

    • Si l’utilisateur ne s’est inscrit qu’à l’un des facteurs spécifiés (ou si un seul facteur est fourni), le sélecteur de facteur est ignoré.

    • Si l’utilisateur n’est pas inscrit à l’un des facteurs spécifiés, la commande échoue.

Vous pouvez utiliser une combinaison de ces méthodes pour adapter vos flux MFA selon vos besoins. Vous pouvez également incorporer des métadonnées utilisateur, telles que des rôles ou des facteurs précédemment utilisés, dans ces méthodes pour créer des flux plus personnalisés.

En choisissant les défis MFA comme commandes, vous pouvez utiliser les facteurs énumérés ci-dessous ou la valeur enrolledFactors. enrolledFactors représente la liste de facteurs actifs associés à un compte utilisateur

  • otp

  • email

  • push-notification

    • otpFallback

  • phone

    • preferredMethod: voice

    • preferredMethod: sms

    • preferredMethod: both

  • webauthn-platform

  • webauthn-roaming

Le tableau de event.authentication.methods comprend un type de champ qui, lorsque le nom de la méthode est réglé à mfa. Type, il devient un lien contenant les valeurs de facteur correspondant à celles utilisées par le type de champ des enrolledFactors (énumérées ci-dessus). Lorsqu’un défi MFA est réalisé, les methods contiennent un objet de name:mfa avec un type réglé sur le facteur utilisé pour ce défi. Les methods sont seulement mis à jour lorsque une action commence. Pour voir les résultats d’un défi, les methods doivent être accédées dans l’action suivante du flux.

Pour en apprendre davantage, examinez les ressources suivantes :

Flux séquencés et contextuels

Avec les commandes challengeWith ou challengeWithAny, vous pouvez utiliser des informations contextuelles pour déterminer le meilleur défi ou la meilleure série de défis à présenter aux utilisateurs. Plus précisément, vous pouvez tirer parti des éléments suivants :

  • Flux séquencés : Mettez les utilisateurs au défi avec une série de facteurs différents dans un ordre spécifique.

  • Flux contextuels : Déterminez le prochain facteur avec lequel mettre l’utilisateur au défi en fonction des défis précédents dans le flux.

Pour illustrer ces flux, considérons l’exemple suivant :

// ACTION 1 

exports.onExecutePostLogin = async (event, api) => {

   api.authentication.challengeWithAny([{ type: 'phone'}, { type: 'push-notification' }]);

} 

// ============================================ 

// ACTION 2 

// Decide based on what the user did in the previous action 

exports.onExecutePostLogin = async (event, api) => { 

    if(event.authentication.methods.find(m => m.type === 'phone') && event.authorization?.roles.includes('admin')) { 

        api.authentication.challengeWith({ type: 'push-notification' }); 

    }

}

Was this helpful?

/

Dans ce scénario, un utilisateur est mis au défi avec un SMS via la commande challengeWithAny dans l’action 1. Ensuite, l’action 2 met l’utilisateur au défi avec une notification poussée parce qu’il a le rôle d’utilisateur administrateur et a également terminé le défi SMS.

Dans ce flux, vous pouvez prendre des décisions sur le facteur avec lequel mettre l’utilisateur au défi pour les raisons suivantes :

  1. Le flux s’arrête après l’exécution de l’action 1.

  2. L’utilisateur termine le flux MFA demandé par l’action 1.

  3. event.authentication.methods.type dans l’action 2 rempli avec les renseignements du défi MFA précédent.

  4. Le flux reprend pour exécuter l’action 2 en utilisant les informations contextuelles de l’action 1.

Bien que cet exemple présente une expérience similaire à l’utilisation de redirections dans vos actions, les commandes utilisant challengeWith et challengeWithAny offrent les avantages uniques suivants :

  • Les flux s’arrêtent après chaque commande, vous permettant d’accumuler des informations de l’utilisateur pouvant être utilisés dans les actions ultérieures. En comparaison, les redirections ne se produisent qu’une seule fois en tant que commande finale d’un flux.

  • LA MFA est déclenchée après que chaque action contenant les commandes challengeWith ou challengeWithAny soit exécutée. Avec les redirections, MFA s’exécute comme action finale dans le pipeline.

Remarque : Cette méthode d’exécution des actions s’applique uniquement à celles contenant les commandes challengeWith ou challengeWithAny. Les actions servant à d’autres fins ne sont pas affectées.

Avant de commencer

Avant de pouvoir personnaliser vos flux MFA, vous devez d’abord activer la MFA dans votre locataire et inviter vos utilisateurs à s’inscrire aux facteurs appropriés.

Préparer le locataire

Pour commencer, configurez la MFA dans votre locataire et activez Personnaliser les facteurs MFA à l’aide des paramètres d’actions. Vous pouvez configurer un ou plusieurs facteurs et définir vos politiques en matière d’MFA à partir du Tableau de bord Auth0 sous Sécurité > Authentification multifacteur.

Pour personnaliser vos flux, vous devez activer Personnaliser les facteurs MFA à l’aide du commutateur d’actions situé dans la section Paramètres additionnels. Vos flux personnalisés ne fonctionneront pas correctement si ce paramètre n’est pas activé.

Auth0 Dashboard > Sécurité > Authentification multifacteur > paramètres additionnels

Inscrire les utilisateurs dans des facteurs

Une fois la MFA configurée, assurez-vous que vos utilisateurs s’inscrivent à un ou plusieurs des facteurs activés. Les utilisateurs doivent s’inscrire auprès d’authentificateurs avant de pouvoir être mis au défi par des commandes d’action post-connexion.

Une fois qu’un utilisateur s’est inscrit ou qu’il a été créé dans votre locataire, vous pouvez créer des inscriptions avec le point de terminaison du Management API authentication-methods, ou vous pouvez gérer les inscriptions des utilisateurs directement par le biais de leur page de profil dans le Tableau de bord Auth0.

Personnaliser vos flux MFA

Une fois votre locataire prêt, vous pouvez créer des actions post-login pour personnaliser vos flux MFA. Les étapes et un exemple d’utilisation sont fournis ci-dessous.

Créer votre action post-connexion

  1. Sur votre Tableau de bord Auth0, naviguez vers Actions > Flux et sélectionnez Connexion.

  2. Sous Ajouter une action, sélectionnez Personnaliser et choisissez Créer une action.

  3. Sur la fenêtre contextuelle Créer une action :

    • Saisissez un nom pour votre action.

    • Sélectionnez Connexion/ Post-connexion comme déclencheur.

    • Utilisez Nœud 18 (Recommandé) comme temps de fonctionnement.

  4. Révisez la fenêtre contextuelle pour garantir son exactitude. Ensuite, sélectionnez Créer.

  5. Après la création, l’éditeur de code affiche la commande onPostExecute. Ajoutez votre code personnalisé ou votre modèle de code à la commande.

  6. Une fois votre commande prête, sélectionnez Déployer.

  7. Sélectionnez Ajouter au flux sur la notification de déploiement réussi.

    • Remarque : Si la notification est fermée, choisissez Retour au flux situé au-dessus de l’éditeur de code.

  8. Faites glisser et déposez votre nouvelle commande à partir du panneau Ajouter une action jusqu’à votre flux de connexion. Ensuite, sélectionnez Appliquer.

Pour réaliser d’autres mises à jour à votre action, naviguez vers Actions > Bibliothèque > Personnaliser et sélectionnez votre commande. Vous pouvez ensuite mettre à jour et redéployer votre code selon vos besoins.

Tester votre action post-connexion

Pour être certain que vos commandes fonctionnent correctement, vous pouvez mettre votre action à l’essai via le Tableau de bord Auth0 :

Si le flux réussit, un écran de confirmation s’affiche. Si vous éprouvez des problèmes, vous pouvez mettre votre code à jour en naviguant vers Actions > Bibliothèque > Personnaliser sur votre Tableau de bord Auth0.

Exemples de cas d’utilisation

Les exemples ci-dessous décrivent des cas d’utilisation courants pour personnaliser les flux MFA.

Utiliser les inscriptions actuelles pour déterminer la méthode de défi

L’exemple suivant met un utilisateur à l’épreuve avec MFA s’il est inscrit avec les facteurs suivants :

  • Mot de passe à usage unique (OTP)

  • Téléphone

exports.onExecutePostLogin = async (event, api) => {

 api.authentication.challengeWithAny([{type: 'otp'}, {type: 'phone'}]);

}

Was this helpful?

/

Utiliser des rôles pour déterminer la méthode de défi

L’exemple suivant met au défi tous les utilisateurs avec un mot de passe à usage unique. Si un utilisateur dispose du rôle d’administrateur et nécessite un niveau d’accès plus élevé à votre application, il est confronté à un facteur supplémentaire sous forme d’authentification renforcée.

exports.onExecutePostLogin = async (event, api) => {
    api.authentication.challengeWith({type: 'otp'});

    const isAdmin = event.authorization?.roles.includes('admin');
    if(isAdmin) {
        api.authentication.challengeWith({type: 'phone'});
    }
}

Was this helpful?

/

Utiliser des métadonnées pour déterminer la méthode de défi

Dans cet exemple, les facteurs MFA sont activés au niveau de l’Organisation. Cet exemple utilise différentes catégories de métadonnées pour déterminer le défi approprié pour chaque utilisateur :

  • Métadonnées de l’organisation : Données au niveau de l’organisation, comme les facteurs spécifiques activés pour une organisation.

  • Métadonnées de l’utilisateur : Données au niveau de l’utilisateur, par exemple si un utilisateur dispose d’un numéro de téléphone associé à son profil.

exports.onExecutePostLogin = async (event, api) => {
  const orgFactors = event.organization?.metadata.factors.split(',') ?? [];

  // Get the intersection of factors available for the user and factors enabled for the org
  const availableFactors = orgFactors.filter(f => event.user?.enrolledFactors?.some(ef => ef.type === f));

  // Prefer push if available
  if(availableFactors.includes('push-notification')) {
    api.authentication.challengeWith({ type: 'push-notification' });
    return;
  }

  // If the user has a verified phone number and the organization
  // allows for SMS and email, prefer SMS and allow email as a fallback
  // if available
  if(event.user.phone_number && 
     event.user.phone_verified && 
     availableFactors.includes('phone')) {
    if(availableFactors.includes('email')) {
      api.authentication.challengeWith({ type: 'phone' }, {
        additionalFactors: [{
          type: 'email'
        }]
      });
    } else {
      api.authentication.challengeWith({ type: 'phone' });
    }

    return;
  }

  // If push-notifications and/or phone couldn't be prioritized, fallback to email if
  // enabled for the org, otherwise fail.
  if(availableFactors.includes('email')) {
    api.authentication.challengeWith({ type: "email" });
    return;
  }

  api.access.deny("No MFA factors available for this org + user");
};

Was this helpful?

/

Autoriser les utilisateurs à sélectionner une autre méthode d’authentification

Pour une expérience plus flexible, vous pouvez présenter aux utilisateurs un lien Essayer une autre méthode comme défi MFA. Ce lien permet aux utilisateurs de sélectionner une méthode d’authentification différente de celle par défaut.

Pour y parvenir, incluez le paramètre additionalFactors dans votre code d’action. Vous pouvez régler ce paramètre pour un facteur spécifique à tous les utilisateurs ou utiliser enrolledFactors pour permettre aux utilisateurs de choisir leur facteur.

Facteur spécifique

L’exemple suivant met les utilisateurs au défi en mettant par défaut un mot de passe à usage unique. S’ils le souhaitent, ces derniers peuvent accéder au lien Essayer une autre méthode pour s’authentifier par courriel.

exports.onExecutePostLogin = async (event, api) => {
  api.authentication.challengeWith({ type: 'otp' }, 
    { additionalFactors: [{type: 'email'}] })
};

Was this helpful?

/

Facteurs inscrits

L’exemple suivant met les utilisateurs au défi en mettant par défaut un mot de passe à usage unique. S’ils le souhaitent, les utilisateurs peuvent accéder au lien Essayer une autre méthode pour s’authentifier à l’aide d’un autre facteur inscrit.

exports.onExecutePostLogin = async (event, api) => {
  const enrolledFactors = event.user.enrolledFactors.map((f) => ({type: f.type}));

  api.authentication.challengeWith({ type: 'otp' }, 
    { additionalFactors: enrolledFactors })
};

Was this helpful?

/

Utiliser une authentification multifacteur (MFA) adaptative pour déterminer quand défier les utilisateurs

L’exemple suivant utilise une Authentification multifacteur (MFA) adaptative pour déterminer si les utilisateurs devraient être mis à l’épreuve.

L’authentification multifacteur (MFA) adaptative est une politique MFA flexible qui protège votre locataire des acteurs malveillants en évaluant les risques potentiels lors de transactions de connexion et invite les utilisateurs à effectuer une vérification supplémentaire, le cas échéant.

Dans ce cas, les utilisateurs sont invités à utiliser la MFA s’ils se connectent à partir d’un appareil qui n’est pas reconnu et que leur pointage de confiance global est faible ou moyen.

/**
* 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?.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.enrolledFactors?.length > 0;

    if (shouldPromptMfa && canPromptMfa) {
      const enrolledFactors = event.user.enrolledFactors.map((f) => ({type: f.type}));
      api.authentication.challengeWithAny(enrolledFactors);
    }

  }

};

Was this helpful?

/

Utiliser des actions pour défier les utilisateurs

Vous pouvez utiliser des actions pour personnaliser les flux MFA en modifiant le déclencheur post-connexion du flux de connexion. Cet exemple utilise la méthode d’authentification par téléphone et preferredMethod : 'both', faisant référence aux facteurs MFA actifs associés au compte d’un utilisateur. Pour plus d’information, référez-vous à Déclencheurs d’actions : post-connexion - Objet d’événement.

api.authentication.challengeWith({ 
  type: 'phone', 
  options: { preferredMethod: 'both'} 
});

Was this helpful?

/

Dépannage

Si vous rencontrez des erreurs ou obtenez des résultats inattendus avec vos flux MFA personnalisés, vous pouvez utiliser les renseignements ci-dessous pour vous aider à identifier et à résoudre ces problèmes.

Journaux de locataires

Vous pouvez surveiller vos flux MFA personnalisés par le biais des journaux des locataires.

Les journaux des locataires sont disponibles sur le Tableau de bord Auth0 sous Monitoring (Surveillance) > Logs (Journaux). Vous pouvez également récupérer les journaux à l’aide de Management API.

Si vous ou vos utilisateurs remarquez un comportement inattendu, consultez les journaux des locataires pour les codes d’événement suivants pour en savoir plus :

Scénario Code de l’événement Description de l’erreur
Un utilisateur est invité à procéder à une authentification multifacteur, mais aucun des facteurs demandés ne peut être utilisé comme défi. Dans ce cas, l’utilisateur ne peut pas terminer l’authentification multifacteur (MFA). mfar Ce scénario entraîne le message d’erreur suivant :

Un défi MFA est utilisé dans une action PostLogin mais les facteurs demandés ne sont pas correctement configurés. Pour procéder à l’authentification multifacteur, autorisez les facteurs demandés et assurez-vous que l’utilisateur s’est inscrit avec ces derniers.
Un utilisateur est invité à procéder à une authentification multifacteur (MFA), mais l’un des facteurs demandés ne peut pas être utilisé comme défi. Dans ce cas, l’utilisateur peut terminer le processus d’authentification à l’aide d’un autre facteur demandé. w
Ce scénario entraîne le message d’avertissement suivant :

Un défi MFA est utilisé dans une action PostLogin, mais le facteur demandé ({nom du facteur}) n’est pas correctement configuré. Autorisez le facteur demandé et assurez-vous que l’utilisateur s’est inscrit avec ce facteur.

Liste de vérification de dépannage

La liste de vérification suivante fournit des suggestions supplémentaires pour identifier et résoudre les problèmes courants liés aux flux MFA personnalisés.

  1. Le commutateur Personnaliser des facteurs MFA avec des actions doit être activé.

  2. Les facteurs référencés dans vos actions doivent être activés dans votre locataire.

  3. Les utilisateurs doivent être inscrits dans les facteurs référencés dans vos actions.

    • Si une personne reçoit une erreur, vérifiez ses renseignements d’utilisateur pour vous assurer qu’elle est inscrite aux facteurs appropriés. Naviguez vers Auth0 Dashboard > Gestion des utilisateurs > Utilisateurs et sélectionnez leur nom dans la liste.

      • Examinez la section Authentification multifacteur (MFA) sous l’onglet Détail pour vérifier leur inscription. Si l’utilisateur n’est pas inscrit, vous pouvez utiliser le lien Envoyer un lien d’invitation d’inscription disponible dans cette section.

      • Vous pouvez également vérifier les inscriptions de l’utilisateur par le biais de l’onglet Raw JSON. Ces renseignements peuvent également être récupérées à l’aide de Management API. Cependant, il est important de noter que l’API ne répertorie pas les authentificateurs inscrits automatiquement, tels que les facteurs par courrier électronique configurés par le biais d’un lien de vérification par courrier électronique.

    • Si les utilisateurs ne sont pas inscrits dans les facteurs appropriés, vous pouvez créer des inscriptions avec le point de terminaison authentication-methods du Management API. Vous pouvez également gérer les inscriptions des utilisateurs directement par le biais de leur page de profil dans le Tableau de bord Auth0.

  4. Assurez-vous que vos actions ont été déployées et enregistrées dans votre pipeline.

    • Naviguez vers Auth0 Dashboard > Actions > Bibliothèque > Personnaliser. Localisez votre action dans la liste et assurez-vous que son statut est Déployée. Si un statut différent est répertorié, accédez à votre action, vérifiez le code et cliquez sur Déployer en haut à droite.

    • Naviguez vers Dashboard Auth0 > Actions > Bibliothèque > Flux et sélectionnez Connexion. Assurez-vous que votre action est répertoriée dans le flux. Si ce n’est pas le cas, accédez à l’onglet Personnaliser du panneau Ajouter une action et faites glisser et déposez votre action dans le flux de connexion. Ensuite, sélectionnez Appliquer.

  5. Assurez-vous d’avoir la dernière version des actions post-login.

    • Naviguez vers Auth0 Dashboard > Actions > Bibliothèque > Personnaliser et sélectionnez votre action. Si votre action est obsolète, une bannière jaune vous invitant à mettre à jour l’action s’affichera. Si la bannière s’affiche, sélectionnez Mettre à jour.

    • Vous pouvez également préciser la dernière version des actions post-connexion pour le déploiement en utilisant l’outil Deploy CLI. Pour en savoir plus, consultez Configurer l’outil Deploy CLI.