> ## Documentation Index
> Fetch the complete documentation index at: https://translations.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> Personaliza los flujos de MFA mediante Actions de post-login para solicitar a los usuarios que se inscriban en factores específicos.

# Personaliza la inscripción en MFA en Universal Login

Auth0 admite varios factores para proteger el acceso de los usuarios con [autenticación multifactor (MFA](/es/docs/secure/multi-factor-authentication/multi-factor-authentication-factors)). Mediante Actions `post-login`, puedes personalizar tus flujos de <Tooltip tip="Autenticación multifactor (MFA): proceso de autenticación del usuario que utiliza un factor adicional al username y la contraseña, como un code por SMS." cta="Ver glosario" href="/es/docs/glossary?term=MFA">MFA</Tooltip> para solicitar a los usuarios que se inscriban en factores específicos. Después de que un usuario se inscriba en un factor, podrá usarlo como método secundario de autenticación en futuros inicios de sesión.

También puedes usar información contextual para personalizar aún más tus flujos de inscripción en MFA. Por ejemplo, puedes solicitar a los usuarios que se inscriban en SMS para una aplicación, mientras que para otra puedes pedirles que se inscriban en notificaciones push o en WebAuthn.

Esta función te permite personalizar tus flujos de inscripción en MFA. Si quieres personalizar los flujos de MFA para usuarios que ya están inscritos, consulta [Personalizar la selección de MFA para Universal Login](/es/docs/secure/multi-factor-authentication/customize-mfa/customize-mfa-selection-universal-login).

<div id="how-it-works">
  ## Cómo funciona
</div>

Puedes usar [Actions](/es/docs/customize/actions) para personalizar tus flujos de inscripción en MFA. En concreto, puedes modificar el trigger `post-login` de [Login Flow](/es/docs/customize/actions/explore-triggers/signup-and-login-triggers/login-trigger) con los siguientes métodos de Authentication API:

* `enrollWith`: Especifica el factor predeterminado que se presenta a los usuarios durante la inscripción. Opcionalmente, puedes proporcionar una lista alternativa de factores para que los usuarios elijan. Si la proporcionas, se muestra un enlace Probar otro método en la pantalla de inscripción.
* `enrollWithAny`: Especifica un conjunto de factores entre los que los usuarios pueden elegir durante la inscripción. De forma predeterminada, este método muestra una pantalla de selección que permite a los usuarios elegir el factor que prefieran. En algunos casos, la experiencia del usuario puede variar:

  * Si se han especificado dos o más factores, se muestra la pantalla de selección al usuario.
  * Si el usuario ya se ha inscrito en todos los factores especificados excepto en uno, se omite la pantalla de selección y se le solicita que se inscriba en el factor restante.
  * Si el usuario ya se ha inscrito en todos los factores especificados, el comando falla y la secuencia de inicio de sesión continúa.

Puedes usar una combinación de estos métodos para personalizar tus flujos de inscripción en MFA. También puedes incorporar metadatos del usuario, como roles o la fecha del último inicio de sesión, para crear experiencias más personalizadas.

Los flujos de inscripción personalizados admiten los siguientes factores:

* `otp`
* `recovery-code`
* `push-notification`
* `phone`

  * `preferredMethod: voice`
  * `preferredMethod: sms`
  * `preferredMethod: both`
* `webauthn-platform`
* `webauthn-roaming`

Después de que un usuario se inscriba en un factor, su valor se agrega a `enrolledFactors`. Esta propiedad representa la lista de factores activos asociados a su cuenta de usuario.

El array `event.authentication.methods` incluye un campo `type` cuando el nombre del método es `mfa`. Este campo contiene valores de factor (string) que coinciden con los que usa el campo `type` de `enrolledFactors`.

Cuando se produce una inscripción en MFA, `methods` contiene el objeto `name:mfa` con `type` establecido en el factor usado para ese evento. `methods` y `enrolledFactors` solo se actualizan al inicio de una Action. Puedes acceder a los resultados de un evento de inscripción en la siguiente Action del flujo.

Para obtener más información, consulta los siguientes recursos:

* [Actions Triggers: post-login - Event Object](/es/docs/customize/actions/explore-triggers/signup-and-login-triggers/login-trigger/post-login-event-object)
* [Actions Triggers: post-login - API Object](/es/docs/customize/actions/explore-triggers/signup-and-login-triggers/login-trigger/post-login-api-object)

<div id="sequenced-and-contextual-flows">
  ### Flujos secuenciados y contextuales
</div>

Con los comandos `enrollWith` o `enrollWithAny`, puedes usar información contextual para determinar la mejor opción de inscripción o la mejor serie de inscripciones para mostrar a los usuarios.

* El comando `enrollWith` admite un factor inicial o predeterminado y una lista de alternativas. Los usuarios solo pueden inscribirse en un factor por comando.
* El comando `enrollWithAny` admite una lista de factores. El orden especificado de los factores determina cómo se muestra la lista a los usuarios. Los usuarios solo pueden inscribirse en un factor por comando.

Con estos comandos, puedes aprovechar lo siguiente:

* **Flujos secuenciados**: Inscribe a los usuarios en una serie de factores en un orden específico.
* **Flujos contextuales**: Determina qué factor mostrar al usuario en función de los metadatos o de comandos anteriores en el flujo.

Para ilustrar mejor estos flujos, considera el siguiente ejemplo:

```javascript lines expandable theme={null}
// Action 1

exports.onExecutePostLogin = async (event, api) => {
  if (event.user.enrolledFactors.length) {
    // ya inscrito, desafiar
    api.authentication.challengeWithAny(event.user.enrolledFactors.map(m => ({type: m.type})));
    if (event.user.app_metadata.isAdmin &&
        !event.user.enrolledFactors.some(m => m.type === 'webauthn-roaming')) {
          // si es administrador y no tiene una clave de seguridad, lo que significa que se usó un factor diferente, inscribirse ahora
          api.authentication.enrollWith({type: 'webauthn-roaming'})
        }
  }
  else {
    // no inscrito; elegir un factor para inscribirse ahora
    api.authentication.enrollWithAny([{type: 'webauthn-roaming'}, {type: 'otp'}]);
    if (event.user.app_metadata.isAdmin) {
      // un factor más para los administradores
      api.authentication.enrollWithAny([{type: 'webauthn-roaming'}, {type: 'otp'}]);
    }
  }
};

// Action 2

exports.onExecutePostLogin = async (event, api) => {
  function performed(type) {
    return event.authentication.methods.some(m => m.name === 'mfa' &&
           m.type === type &&
           Date.now() - new Date(m.timestamp).getTime() < 5000)
  }
  if (event.user.app_metadata.isAdmin) {
      // exigir que se usen ambos factores desafiando el que aún no se ha utilizado
      if (!performed('webauthn-roaming')) {
        api.authentication.challengeWith({type: 'webauthn-roaming'})
      }
      else if (!performed('otp')) {
        api.authentication.challengeWith({type: 'otp'})
      }
  }
};
```

Estas dos Actions se combinan para crear un escenario en el que los usuarios **sin** el rol de administrador deben inscribirse con una contraseña de un solo uso (OTP) o una clave de seguridad. Por el contrario, los usuarios **con** el rol de administrador deben inscribirse en ambos factores.

La Action 1 revisa `app_metadata` para determinar si el usuario es administrador y luego le solicita que se inscriba en factores específicos. Si un usuario administrador solo se ha inscrito en OTP, primero debe completar un desafío de OTP para completar la autenticación. Después, se le solicita que se inscriba con claves de seguridad (`webauthn-roaming`).

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  Para mantener seguras las cuentas de usuario, los usuarios deben completar un desafío de MFA con uno de sus `enrolledFactors` existentes antes de poder inscribirse en factores adicionales. Esta condición garantiza que pueda implementar de forma segura una política personalizada de inscripción en MFA después de que ya se haya utilizado una aplicación con distintos factores y configuraciones.
</Callout>

El flujo se pausa después de que se ejecuta la Action 1, y tanto `event.user.enrolledFactors` como `event.authentication.methods` se actualizarán cuando se ejecute la Action 2. Esto permite que el código de la Action tome decisiones basadas en datos reales del usuario cuando se ofrece a los usuarios la opción de completar un desafío o inscribirse en distintos factores.

**Nota**: Este método de ejecución de Actions solo se aplica a aquellas que contienen los comandos `enrollWith` o `enrollWithAny`. Las Actions que cumplen otros fines no se ven afectadas.

<div id="before-you-begin">
  ## Antes de comenzar
</div>

Antes de poder personalizar sus flujos de MFA, debe configurar MFA en su inquilino y habilitar la opción Customize MFA Factors using Actions. Puede habilitar uno o más factores y definir sus políticas de MFA en su <Tooltip tip="Auth0 Dashboard: producto principal de Auth0 para configurar sus servicios." cta="Ver glosario" href="/es/docs/glossary?term=Auth0+Dashboard">Auth0 Dashboard</Tooltip>, en [Security > Multi-factor Auth](https://manage.auth0.com/#/security/mfa).

* Para obtener más información sobre el proceso de configuración, consulte [Habilitar la autenticación multifactor](/es/docs/secure/multi-factor-authentication/enable-mfa).
* Para obtener información sobre cómo configurar factores específicos, consulte [Factores de autenticación multifactor](/es/docs/secure/multi-factor-authentication/multi-factor-authentication-factors).

Para personalizar sus flujos, debe habilitar el interruptor Customize MFA Factors using Actions en la sección Additional Settings. Sus flujos personalizados no funcionarán correctamente si esta configuración no está habilitada.

<Frame>
  <img src="https://mintcdn.com/translations/Dcx0M11uuptU53TX/docs/images/cdy7uua7fh8z/2hv0ELTkkka3t230SXfxw/46def5395652b2451cfc9e0ad01a371a/MFA_actions.png?fit=max&auto=format&n=Dcx0M11uuptU53TX&q=85&s=50238f8cd9519f96ed2b438c9799602c" alt="Auth0 Dashboard > Security > Multi-factor Auth > Additional Settings" data-og-width="941" width="941" data-og-height="365" height="365" data-path="docs/images/cdy7uua7fh8z/2hv0ELTkkka3t230SXfxw/46def5395652b2451cfc9e0ad01a371a/MFA_actions.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/translations/Dcx0M11uuptU53TX/docs/images/cdy7uua7fh8z/2hv0ELTkkka3t230SXfxw/46def5395652b2451cfc9e0ad01a371a/MFA_actions.png?w=280&fit=max&auto=format&n=Dcx0M11uuptU53TX&q=85&s=b81a782d9ae6af71e12200500fd2ce97 280w, https://mintcdn.com/translations/Dcx0M11uuptU53TX/docs/images/cdy7uua7fh8z/2hv0ELTkkka3t230SXfxw/46def5395652b2451cfc9e0ad01a371a/MFA_actions.png?w=560&fit=max&auto=format&n=Dcx0M11uuptU53TX&q=85&s=d39c8f35ea331af43535c8acb4ae8382 560w, https://mintcdn.com/translations/Dcx0M11uuptU53TX/docs/images/cdy7uua7fh8z/2hv0ELTkkka3t230SXfxw/46def5395652b2451cfc9e0ad01a371a/MFA_actions.png?w=840&fit=max&auto=format&n=Dcx0M11uuptU53TX&q=85&s=3780fc111d9521c30b6545f8fbdc0185 840w, https://mintcdn.com/translations/Dcx0M11uuptU53TX/docs/images/cdy7uua7fh8z/2hv0ELTkkka3t230SXfxw/46def5395652b2451cfc9e0ad01a371a/MFA_actions.png?w=1100&fit=max&auto=format&n=Dcx0M11uuptU53TX&q=85&s=00d331892f83f2a395efb8380884f5e5 1100w, https://mintcdn.com/translations/Dcx0M11uuptU53TX/docs/images/cdy7uua7fh8z/2hv0ELTkkka3t230SXfxw/46def5395652b2451cfc9e0ad01a371a/MFA_actions.png?w=1650&fit=max&auto=format&n=Dcx0M11uuptU53TX&q=85&s=877796b907df280736c4e4969263363e 1650w, https://mintcdn.com/translations/Dcx0M11uuptU53TX/docs/images/cdy7uua7fh8z/2hv0ELTkkka3t230SXfxw/46def5395652b2451cfc9e0ad01a371a/MFA_actions.png?w=2500&fit=max&auto=format&n=Dcx0M11uuptU53TX&q=85&s=2a2265a588fac3455f1a976f3427ec7a 2500w" />
</Frame>

**Nota**: Las Actions que usan los comandos `enrollWith` o `enrollWithAny` anulan cualquier política o regla existente que habilite o deshabilite MFA en un inquilino.

<div id="customize-mfa-enrollment-flows">
  ## Personalice los flujos de inscripción de MFA
</div>

Después de configurar MFA para su inquilino, puede crear Actions de `post-login` para personalizar sus flujos de inscripción de MFA.

<Warning>
  Las Actions (o una serie de Actions) de un inquilino solo pueden ejecutar **cuatro** de los siguientes comandos en cada flujo de usuario:

  * `enrollWith`
  * `enrollWithAny`
  * `challengeWith`
  * `challengeWithAny`

  Si se supera este límite (es decir, si se intenta ejecutar un quinto comando de este tipo), se producirá un error de autenticación.
</Warning>

<div id="create-your-post-login-action">
  ### Cree su Action de post-login
</div>

Puede crear Actions desde Auth0 Dashboard:

1. Vaya a [Actions > Flows](https://manage.auth0.com/#/actions/flows) y seleccione **Login**.
2. En el panel Add Action, seleccione el icono de **signo más (+)** y elija **Build from scratch**.
3. En la ventana emergente Create Action:

   * Introduzca un nombre para su Action.
   * Seleccione **Login / Post-Login** como desencadenador.
   * Use **Node 22 (Recommended)** como entorno de ejecución.
4. Revise la ventana emergente para asegurarse de que todo sea correcto. Luego, seleccione **Create**.
5. En el editor de código, agregue su código personalizado a la función `onPostExecute`.
6. Cuando el código esté listo, seleccione **Deploy**.
7. Seleccione **Add to Flow** en la notificación de implementación correcta.

   * **Nota**: Si la notificación se cierra, elija **Back to Flow** encima del editor de código.
8. Arrastre y suelte su nueva Action desde el panel Add Action a su flujo de Login. Luego, seleccione **Apply**.

Para realizar cambios adicionales después de guardar, vaya a [Actions > Library > Custom](https://manage.auth0.com/#/actions/library) y seleccione su Action. Luego puede actualizar el código y volver a implementarlo según sea necesario.

<div id="test-your-post-login-action">
  ### Pruebe su Action de post-login
</div>

Para asegurarse de que sus comandos funcionen correctamente, puede probar su Action desde el Auth0 Dashboard:

1. Vaya a [Authentication > Authentication Profile](https://manage.auth0.com/#/authentication-profiles).
2. Seleccione **Try** para abrir una pantalla de inicio de sesión de ejemplo en una pestaña nueva.
3. Introduzca sus credenciales y pruebe su nuevo flujo de MFA.

Si el flujo se completa correctamente, se mostrará una pantalla de confirmación. Si encuentra algún problema, puede actualizar el código yendo a [Actions > Library > Custom](https://manage.auth0.com/#/actions/library) en el Auth0 Dashboard.

<div id="sample-use-case">
  ## Ejemplo de caso de uso
</div>

El siguiente ejemplo muestra un caso de uso común para personalizar los flujos de inscripción en MFA.

<div id="prompt-users-with-mfa-options-for-enrollment">
  ### Muestre a los usuarios las opciones de MFA para inscribirse
</div>

En el siguiente ejemplo, se solicita a los usuarios OTP de forma predeterminada. Si lo desean, pueden usar el enlace Probar otro método para autenticarse con correo electrónico en su lugar.

<div id="troubleshooting">
  ## Solución de problemas
</div>

Si experimenta errores o resultados inesperados en sus procesos de inscripción en MFA personalizados, puede usar la siguiente información para identificar y resolver estos problemas.

<div id="tenant-logs">
  ### Registros del inquilino
</div>

Puede monitorizar sus inscripciones de MFA personalizadas mediante los [registros del inquilino](/es/docs/deploy-monitor/logs).

Los registros del inquilino están disponibles en el Auth0 Dashboard, en [Monitoring > Logs](https://manage.auth0.com/#/logs). Como alternativa, puede recuperar los registros mediante la [Management API](https://auth0.com/docs/api/management/v2/introduction).

Si usted o sus usuarios experimentan un comportamiento inesperado, revise los registros del inquilino y consulte los siguientes códigos de evento para obtener más información:

| Escenario                                                                                                                                                                                                                                                                                                                                                                                                                                            | Evento | Mensaje de error                                                                                                                                                                                                                           |
| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Se le solicita a un usuario que se inscriba en un factor específico. Sin embargo, el factor solicitado cumple una de las siguientes condiciones:<br /><ul><li>El factor no está habilitado en su inquilino.</li><li>El factor no es compatible con el navegador del usuario.</li><li>El usuario ya se ha inscrito en el factor solicitado.</li></ul>En este escenario, el usuario puede completar el flujo si hay factores alternativos disponibles. | w      | Se usa una inscripción de MFA en una Action PostLogin, pero el factor solicitado `${factor.name}` no está configurado correctamente. Habilite el factor solicitado y asegúrese de que el usuario no esté ya inscrito en él.                |
| Se le solicita a un usuario que se inscriba en uno o varios factores, pero los factores proporcionados no pueden usarse para la inscripción. En este caso, el usuario no puede completar el flujo.                                                                                                                                                                                                                                                   | mfar   | Se usa una inscripción de MFA en una Action PostLogin, pero los factores solicitados no están configurados correctamente. Para realizar MFA, habilite los factores solicitados y asegúrese de que el usuario no esté ya inscrito en ellos. |
| Un usuario intenta inscribirse en un factor nuevo sin completar al menos un desafío con una inscripción existente.                                                                                                                                                                                                                                                                                                                                   | mfar   | Se solicitó una inscripción de MFA, pero el usuario ya está inscrito en MFA. Complete al menos un desafío con un factor existente antes de inscribirse en uno nuevo.                                                                       |

<div id="troubleshooting-checklist">
  ### Lista de verificación para la solución de problemas
</div>

La siguiente lista de verificación ofrece sugerencias adicionales para identificar y resolver problemas comunes con flujos de MFA personalizados.

1. La opción **Customize MFA factors with Actions** debe estar habilitada.

   * Vaya a [Auth0 Dashboard > Security > Multi-factor Auth](https://manage.auth0.com/#/security/mfa) y asegúrese de que la opción de la sección Additional Settings esté habilitada.
2. Los factores a los que hacen referencia sus Actions deben estar habilitados en su inquilino.

   * **Revise su código**: Vaya a [Auth0 Dashboard > Actions > Library > Custom](https://manage.auth0.com/#/actions/library) y revise el código de sus Actions. Asegúrese de que todos los factores referenciados sean aplicables a sus casos de uso.
   * **Revise sus factores**: Vaya a [Auth0 Dashboard > Security > Multi-factor Auth](https://manage.auth0.com/#/security/mfa) y asegúrese de que todos los factores referenciados en sus Actions estén habilitados.
3. Asegúrese de que sus Actions se hayan implementado y guardado en su Pipeline.

   1. Vaya a [Auth0 Dashboard > Actions > Library > Custom](https://manage.auth0.com/#/actions/library). Ubique su Action en la lista y asegúrese de que su estado sea **Deployed**. Si aparece un estado diferente, abra su Action, revise el código y haga clic en **Deploy** en la esquina superior derecha.
   2. Vaya a [Auth0 Dashboard > Actions > Library > Flows](https://manage.auth0.com/#/actions/flows) y seleccione **Login**. Asegúrese de que su Action aparezca en el flujo. Si no es así, abra la **pestaña Custom** del panel Add Action y arrastre y suelte su Action en el flujo de Login. Luego, seleccione **Apply**.
4. Asegúrese de haber actualizado a la versión más reciente de las Actions `post-login`.

   * Vaya a [Auth0 Dashboard > Actions > Library > Custom](https://manage.auth0.com/#/actions/library) y seleccione su Action. Si su Action está desactualizada, verá un banner amarillo que le indicará que actualice la Action. Si aparece el banner, seleccione **Update**.
   * También puede especificar la versión más reciente de las Actions `post-login` para la implementación al usar Deploy CLI. Para obtener más información, consulte [Configure the Deploy CLI](/es/docs/deploy-monitor/deploy-cli-tool/configure-the-deploy-cli).
