Déclencheur de connexion

Le déclencheur de connexion s’exécute lorsqu’un utilisateur s’authentifie avec succès auprès d’une application sur un locataire Auth0. Cela inclut également l’authentification post-inscription.

Diagram showing the Actions Login Flow.

Les Actions de ce déclencheur sont bloquantes (synchrones), ce qui signifie qu’elles s’exécutent dans le cadre du processus d’un déclencheur et empêchent le reste du pipeline Auth0 de s’exécuter jusqu’à ce que l’Action soit terminée.

Déclencheurs

Connexion / Post-connexion

Le déclencheur post-login est une fonction exécutée après la connexion d’un utilisateur et lorsqu’un jeton d’actualisation est demandé.

Références

  • Objet événement : fournit des informations contextuelles sur un seul utilisateur se connectant via Auth0.

  • Objet API : fournit des méthodes permettant de modifier le comportement du flux.

Cas d’utilisation courants

Contrôle d’accès

Une Action post-connexion peut être utilisée pour fournir une logique personnalisée utilisée pour refuser l’accès à un utilisateur qui tente d’accéder à une application :

/**
 * @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.email && event.user.email.endsWith("@example.com") && event.client.name === "My SPA") {
    api.access.deny(`Access to ${event.client.name} is not allowed.`);
  }
};

Was this helpful?

/

Autoriser l’accès uniquement les jours ouvrables pour une application spécifique

si vous avez une application et que vous souhaitez vous assurer qu’elle ne soit accessible qu’en semaine, vous pouvez créer l’Action suivante :

/**
 * @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.client.name === "APP_NAME") {
    const d = new Date().getDay();

    if (d === 0 || d === 6) {
      api.access.deny("This app is only available during the week.");
    }
  }
}

Was this helpful?

/

Interdire l’accès à toute personne appelant une API

Supposons que vous souhaitiez refuser l’accès à tous les utilisateurs qui appellent une API. Cela signifie que vous devez refuser l’accès en fonction de la valeur audience de votre API, que vous pouvez trouver dans le champ API de public de votre API dans Dashboard > Applications > API. Pour cela, vous devez créer l’Action suivante :

/**
 * @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) => {
  // In Actions, an API will be referred to as a Resource Server.
  if (event.resource_server && event.resource_server.identifier === "http://todoapi2.api") {
    api.access.deny("end_users_not_allowed");
  }
}

Was this helpful?

/

Ajouter des rôles d’utilisateur aux jetons d’ID et d’accès

Pour ajouter des rôles d’utilisateur aux jetons émis par Auth0, utilisez l’objet event.authorization avec les méthodes api.idToken.setCustomClaim et api.accessToken.setCustomClaim :

/**
 * @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) => {
  const namespace = 'https://my-app.example.com';
  if (event.authorization) {
    api.idToken.setCustomClaim(`${namespace}/roles`, event.authorization.roles);
    api.accessToken.setCustomClaim(`${namespace}/roles`, event.authorization.roles);
  }
}

Was this helpful?

/

  • Une demande personnalisée ne peut pas inclure certains termes, et nous vous recommandons fortement d’utiliser une demande d’espace de nommage qui prend la forme d’un URI. Consultez notre documentation sur les demandes personnalisées pour plus d’informations.

  • Le JWT renvoyé à l’application demandeuse est construit et signé à la fin du traitement du déclencheur. Le JWT final signé n’est pas accessible dans une action.

Enrichir le profil utilisateur

Auth0 fournit un système complet de stockage des métadonnées dans un Profil utilisateur. Afin de définir user_metadata ou app_metadata sur le profil d’un utilisateur lors de sa connexion, utilisez les fonctionsapi.user.setUserMetadata ou api.user.setAppMetadata.

/**
 * @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) => {
  api.user.setUserMetadata("favorite_color", "blue");
};

Was this helpful?

/

Une fois toutes les actions post-connexion exécutées, Actions mettra à jour le profil utilisateur en une seule opération. Cette opération est soumise à une limite anti-attaques « Write Users » (Écriture des utilisateurs).

Appliquer la politique d’authentification multifacteur (MFA) personnalisée

Une Action post-connexion peut être utilisée pour exiger dynamiquement l’authentification multifacteur (MFA) pour un utilisateur en fonction des besoins de votre application.

/**
 * @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) => {
  // Require MFA for anyone logging in from North America.
  if (event.request.geoip.continentCode === "NA") {
    api.multifactor.enable("any");
  };
};

Was this helpful?

/

Un fournisseur de MFA doit être configuré pour activer la MFA lors d’une connexion. Pour en savoir plus, veuillez consulter Authentification multifacteur (MFA).

Réduisez les frictions grâce aux clés d’identification

Une Action post-connexion peut être utilisée pour réduire les frictions en ignorant dynamiquement l’authentification multifacteur pour un utilisateur qui s’est authentifié avec une clé d’identification.

/**
* 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) => {
 // Check if a passkey was used to authenticate
 const skipMFA = event.authentication?.methods.some(
   (method) => method.name === "passkey"
 );

 // If a passkey was used skip MFA
 if (skipMFA) {
   api.multifactor.enable("none");
 }
};

Was this helpful?

/

La connexion doit avoir les clés d’identification et l’authentification multifacteur (MFA) activées. Pour en savoir plus, veuillez consulter Clés d’accès et Authentification multifacteur (MFA).

Rediriger l’utilisateur vers un site externe

De façon similaire à Règles de redirection, une Action post-connexion peut être utilisée pour envoyer l’utilisateur vers un site externe. Une fois terminée, l’utilisateur peut être redirigé vers Auth0 pour continuer son flux de connexion. Dans l’exemple ci-dessous, une Action de redirection est utilisée pour inviter l’utilisateur à fournir sa couleur préférée.

/**
 * @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) => {
  // Skip the redirect if the user has already chosen a favorite color.
  if (event.user.user_metadata.favorite_color) {
    return;
  }

  const token = api.redirect.encodeToken({
    secret: event.secrets.MY_SHARED_SECRET,
    payload: {
      email: event.user.email,
    },
  });

  // Send the user to https://my-app.example.com along
  // with a `session_token` query string param.
  api.redirect.sendUserTo("https://my-app.example.com", { 
    query: { session_token: token }
  });
};

/**
 * @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.onContinuePostLogin = async (event, api) => {
  // Once the /continue endpoint has been called, unpack the signed token
  // and store the favorite color as user metadata.

  const payload = api.redirect.validateToken({
    secret: event.secrets.MY_SHARED_SECRET,
  });

  api.user.setUserMetadata("favorite_color", payload.favorite_color);
};

Was this helpful?

/

Le pipeline Actions sera suspendu pendant que l’utilisateur est redirigé. Une fois que l’utilisateur poursuit son processus de connexion Auth0, le pipeline Actions reprendra là où il a été suspendu. Les Actions qui ont été exécutées avant la redirection ne sont pas exécutées à nouveau.

Pour en savoir plus à propos des Actions de redirection, veuillez consulter Rediriger avec des actions.

Modifier les permissions d’un jeton d’accès

Lorsque vous modifiez les permissions associées à un jeton d’accès, assurez-vous de respecter les meilleures pratiques entourant la spécification d'audience.

  • Vérifiez toujours l'audience attendue avant d’ajouter des permissions.

  • Empêchez l’utilisation d’entrées non fiables lors de l’ajout de permissions.

/**
 * @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.request.query.audience === 'https://example.com/api') {
    api.accessToken.addScope("read:xyz");
  }
};

Was this helpful?

/

En savoir plus