Saltar al contenido principal
El desencadenador de Login se ejecuta cuando un usuario se autentica correctamente en una aplicación de un inquilino de Auth0. Esto también incluye la autenticación posterior al registro.
Diagrama que muestra el Login Flow de Actions.
Las Actions de este desencadenador son bloqueantes (sincrónicas), lo que significa que se ejecutan como parte del proceso del desencadenador e impiden que el resto del flujo de Auth0 continúe hasta que la Action se complete.

Activadores

Login / Post Login

El desencadenador post-login es una función que se ejecuta después de que un usuario inicia sesión y cuando se canjea un .

Referencias

  • Objeto de evento: Proporciona información contextual sobre un usuario que inicia sesión a través de Auth0.
  • Objeto API: Proporciona métodos para cambiar el comportamiento del flujo.

Casos de uso habituales

Control de acceso

Se puede usar una Action de post-login para implementar lógica personalizada que deniegue el acceso a un usuario que intenta acceder a una aplicación:
/**
 * @param {Event} event - Detalles sobre el usuario y el contexto en el que está iniciando sesión.
 * @param {PostLoginAPI} api - Interfaz cuyos métodos pueden usarse para cambiar el comportamiento del 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.`);
  }
};

Permita el acceso solo entre semana para una aplicación específica

Si tiene una aplicación y quiere asegurarse de que solo se pueda acceder a ella entre semana, puede crear la siguiente Action:
/**
 * @param {Event} event - Detalles sobre el usuario y el contexto en el que está iniciando sesión.
 * @param {PostLoginAPI} api - Interfaz cuyos métodos pueden usarse para cambiar el comportamiento del 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.");
    }
  }
}

Denegar el acceso a quienes llamen a una API

Supongamos que quiere denegar el acceso a todos los usuarios que llaman a una API. Esto significa que debe denegar el acceso en función del valor de la  de su API, que puede encontrar en el campo API Audience de su API en Dashboard > Applications > APIs. Para ello, cree la siguiente Action:
/**
 * @param {Event} event - Detalles sobre el usuario y el contexto en el que está iniciando sesión.
 * @param {PostLoginAPI} api - Interfaz cuyos métodos pueden usarse para cambiar el comportamiento del login.
 */
 exports.onExecutePostLogin = async (event, api) => {
  // En Actions, una API se denomina Resource Server.
  if (event.resource_server && event.resource_server.identifier === "http://todoapi2.api") {
    api.access.deny("end_users_not_allowed");
  }
}

Agregue roles del usuario a los tokens de ID y de acceso

Para agregar roles del usuario a los tokens emitidos por Auth0, use el objeto event.authorization junto con los métodos api.idToken.setCustomClaim y api.accessToken.setCustomClaim:
/**
 * @param {Event} event - Detalles sobre el usuario y el contexto en el que está iniciando sesión.
 * @param {PostLoginAPI} api - Interfaz cuyos métodos pueden usarse para cambiar el comportamiento del 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);
  }
}
  • Un claim personalizado no puede incluir ciertos términos, y recomendamos encarecidamente usar un claim con espacio de nombres en forma de URI. Consulta nuestra documentación sobre claims personalizados para obtener más información.
  • El que se devuelve a la aplicación solicitante se crea y firma al final del procesamiento del desencadenador. No se puede acceder al JWT final firmado desde una Action.

Enriquecer el perfil de usuario

Auth0 proporciona un sistema para almacenar metadatos en un perfil de usuario. Para establecer user_metadata o app_metadata en el perfil de un usuario durante el inicio de sesión, use las funciones api.user.setUserMetadata o api.user.setAppMetadata.
/**
 * @param {Event} event - Detalles sobre el usuario y el contexto en el que está iniciando sesión.
 * @param {PostLoginAPI} api - Interfaz cuyos métodos pueden usarse para cambiar el comportamiento del Login.
 */
exports.onExecutePostLogin = async (event, api) => {
  api.user.setUserMetadata("favorite_color", "blue");
};
Una vez ejecutadas todas las Actions de post-login, Actions actualizará el perfil de usuario en una sola operación. Esta operación está sujeta al límite de tasa de “Write Users”.

Aplicar una política de MFA personalizada

Se puede usar una Action de post-login para exigir dinámicamente a un usuario según las necesidades de su aplicación.
/**
 * @param {Event} event - Detalles sobre el usuario y el contexto en el que está iniciando sesión.
 * @param {PostLoginAPI} api - Interfaz cuyos métodos pueden usarse para cambiar el comportamiento del Login.
 */
exports.onExecutePostLogin = async (event, api) => {
  // Requerir MFA para cualquier usuario que inicie sesión desde América del Norte.
  if (event.request.geoip.continentCode === "NA") {
    api.multifactor.enable("any");
  };
};
Se debe configurar un proveedor de MFA para habilitar MFA al iniciar sesión. Para obtener más información, consulte Autenticación multifactor.

Reduce la fricción con claves de acceso

Una Action de post-login puede usarse para reducir la fricción al omitir dinámicamente MFA para un usuario que se haya autenticado con una clave de acceso.
/**
* Manejador que se llamará durante la ejecución de un flujo PostLogin.
*
* @param {Event} event - Detalles sobre el usuario y el contexto en el que está iniciando sesión.
* @param {PostLoginAPI} api - Interfaz cuyos métodos pueden usarse para cambiar el comportamiento del login.
*/
exports.onExecutePostLogin = async (event, api) => {
 // Verificar si se usó una clave de acceso para autenticar
 const skipMFA = event.authentication?.methods.some(
   (method) => method.name === "passkey"
 );

 // Si se usó una clave de acceso, omitir MFA
 if (skipMFA) {
   api.multifactor.enable("none");
 }
};
La conexión debe tener habilitadas las claves de acceso y MFA. Para obtener más información, consulte Claves de acceso y Autenticación multifactor.

Redirigir al usuario a un sitio externo

Al igual que Redirect Rules, puede usarse una Action de post-login para enviar al usuario a un sitio externo. Una vez completado el proceso, se puede redirigir al usuario de regreso a Auth0 para continuar su flujo de inicio de sesión. En el siguiente ejemplo, se usa una Redirect Action para pedirle al usuario que indique su color favorito.
/**
 * @param {Event} event - Detalles sobre el usuario y el contexto en el que está iniciando sesión.
 * @param {PostLoginAPI} api - Interfaz cuyos métodos pueden usarse para cambiar el comportamiento del login.
 */
exports.onExecutePostLogin = async (event, api) => {
  // Omitir la redirección si el usuario ya eligió un color favorito.
  if (event.user.user_metadata.favorite_color) {
    return;
  }

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

  // Enviar al usuario a https://my-app.example.com junto
  // con un parámetro de cadena de consulta `session_token`.
  api.redirect.sendUserTo("https://my-app.example.com", { 
    query: { session_token: token }
  });
};

/**
 * @param {Event} event - Detalles sobre el usuario y el contexto en el que está iniciando sesión.
 * @param {PostLoginAPI} api - Interfaz cuyos métodos pueden usarse para cambiar el comportamiento del login.
 */
exports.onContinuePostLogin = async (event, api) => {
  // Una vez que se llame al endpoint /continue, desempaquetar el token firmado
  // y almacenar el color favorito como metadatos del usuario.

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

  api.user.setUserMetadata("favorite_color", payload.favorite_color);
};
La canalización de Actions se suspenderá mientras se redirige al usuario. Una vez que el usuario continúe con su proceso de inicio de sesión en Auth0, la canalización de Actions se reanudará en el punto en que se suspendió. Las Actions que se ejecutaron antes de la redirección no se volverán a ejecutar. Para obtener más información sobre las Actions de redirección, consulta Redirección con Actions.

Modificar alcances en un token de acceso

Al modificar los alcances asociados con un , asegúrese de seguir las prácticas recomendadas para especificar la audiencia.
  • Compruebe siempre la audiencia esperada antes de agregar alcances.
  • Evite usar entradas no confiables al agregar alcances.
/**
 * @param {Event} event - Detalles sobre el usuario y el contexto en el que está iniciando sesión.
 * @param {PostLoginAPI} api - Interfaz cuyos métodos pueden usarse para cambiar el comportamiento del login.
 */
exports.onExecutePostLogin = async (event, api) => {
  if (event?.resource_server?.identifier === 'https://example.com/api') {
    api.accessToken.addScope("read:xyz");
  }
};

Deniegue el acceso a huellas JA3/JA4 específicas

El objeto event.security_context contiene los valores de las huellas JA3/JA4 de la transacción actual.
exports.onExecutePreUserRegistration = async (event, api) => {
  const clientJa4 = event?.security_context?.ja4;
  console.log('[ACTION]', {clientJa4});
  const badFingerprints = ['t13d1517h2_8daaf6152771_b6f405a00624','t13d1516h2_8daaf6152771_d8a2da3f94cd'];
  if (clientJa4 && badFingerprints.includes(clientJa4)){
    api.access.deny('suspicious_tls_fingerprint', 'Your TLS fingerprint has been flagged as suspicious');
  }
};

Más información