> ## 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.

# Autenticación sin contraseña en conexiones de base de datos

> Aprenda a configurar una autenticación realmente sin contraseña en una conexión de base de datos nueva o existente.

export const ReleaseStageNotice = ({feature, stage, plans, contact, terms}) => {
  const stageTextMap = {
    "beta": "Beta",
    "ea": "Acceso anticipado"
  };
  const stageText = stageTextMap[stage] || "una etapa de lanzamiento del producto";
  const prsLink = "/docs/troubleshoot/product-lifecycle/product-release-stages";
  const linkify = (text, url) => {
    return <a href={url} target="_blank" rel="noreferrer" class="link">{text}</a>;
  };
  const includeDetails = (plans, contact, terms) => {
    const hasDetails = terms || plans || contact;
    if (!hasDetails) return null;
    return <span data-as="p">
            {plans && <>Esta funcionalidad está disponible en los {linkify(`planes ${plans}`, "https://auth0.com/pricing")}. </>}
            {contact && "Para participar, ponte en contacto con " + contact + ". "}
            {terms && <>Al usar esta funcionalidad, aceptas los términos aplicables de la prueba gratuita incluidos en el {linkify("Master Subscription Agreement", "https://www.okta.com/legal")} de Okta.</>}
        </span>;
  };
  return <Warning>
            <span data-as="p">
                <strong>La funcionalidad {feature} está en {linkify(stageText, prsLink)}.</strong>
            </span>

            {includeDetails(plans, contact, terms)}
        </Warning>;
};

<ReleaseStageNotice feature="Passwordless Authentication on Database Connections" stage="ea" contact="support" terms="true" />

Auth0 le permite configurar la autenticación sin contraseña mediante correo electrónico y teléfono directamente en una [conexión de base de datos](/es/docs/authenticate/database-connections). En lugar de crear una conexión independiente para la autenticación con OTP, puede ofrecer el inicio de sesión sin contraseña directamente desde su conexión de base de datos. Esto reduce la complejidad de la implementación y simplifica la experiencia de inicio de sesión para los usuarios finales.

<Callout icon="triangle-exclamation" color="#F59E0B" iconType="regular">
  La autenticación sin contraseña en conexiones de base de datos no es compatible con Classic Login.
</Callout>

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

Auth0 usa un enfoque de [autenticación Identifier-First](/es/docs/authenticate/login/auth0-universal-login/identifier-first) en el que los usuarios se verifican mediante autenticación OTP:

1. El usuario final introduce un identificador para iniciar sesión con [Universal Login de Auth0](/es/docs/authenticate/login/auth0-universal-login).
2. Auth0 busca los métodos de autenticación de cada identificador configurado en tu conexión de base de datos.
3. Al usuario se le muestra la opción más adecuada según `default_method` y los métodos de autenticación disponibles (por ejemplo, recibir un OTP por correo electrónico o teléfono, o introducir una contraseña).
4. Si OTP es el método de autenticación seleccionado, Auth0 envía un code al correo electrónico o al teléfono del usuario.
5. El usuario introduce el code y se autentica. Si has configurado claves de acceso, se le pedirá que complete la inscripción progresiva en claves de acceso.

<Card title="Antes de empezar">
  * Configura tu inquilino para usar el [perfil de autenticación Identifier-First](https://auth0.com/docs/authenticate/login/auth0-universal-login/identifier-first).
  * Si tienes previsto usar OTP por teléfono (SMS o voz), debes habilitar la opción [Experiencia de teléfono unificada](/es/docs/customize/phone-messages/unified-phone/configure-unified-phone) en [**Marca > Proveedor de teléfono**](https://manage.auth0.com/#/phone/templates/phone/provider).
  * Los [atributos](/es/docs/authenticate/database-connections/activate-and-configure-attributes-for-flexible-identifiers) deben estar habilitados en la conexión de base de datos.
  * Si tienes previsto usar conexiones sin contraseña existentes (heredadas) junto con autenticación sin contraseña en conexiones de base de datos, y no quieres configurar tus conexiones sin contraseña existentes para usar Unified Phone Provider:
    1. Ve a [**Auth0 Dashboard > Authentication > Passwordless**](https://manage.auth0.com/#/connections/passwordless).
    2. Selecciona **Configure** en SMS.
    3. Asegúrate de que la opción **Use Tenant-Level Messaging Provider** esté deshabilitada.
</Card>

<div id="configure-attributes-identifiers">
  ## Configurar atributos (identificadores)
</div>

Al configurar la autenticación sin contraseña con correo electrónico y teléfono en conexiones de base de datos, primero debe determinar qué atributo o atributos quiere que los usuarios finales proporcionen durante el registro y el inicio de sesión.

Revise el tipo de identificador y el método de autenticación correspondiente:

| Identificador      | Método(s) de autenticación                      |
| ------------------ | ----------------------------------------------- |
| Correo electrónico | Contraseña, OTP por correo electrónico, Passkey |
| Teléfono           | Contraseña, OTP por teléfono, Passkey           |
| Username           | Contraseña                                      |

Para los identificadores de correo electrónico y teléfono, si la contraseña **no** está habilitada, debe tener habilitada la verificación OTP para el registro. Puede configurar los atributos de correo electrónico y teléfono como opcionales durante el registro, para que los usuarios puedan registrarse solo con un correo electrónico o solo con un número de teléfono.

Cuando un usuario se autentica con OTP por correo electrónico, `email_verified` se establece automáticamente en `true` en su perfil. Cuando un usuario se autentica con OTP por teléfono, `phone_verified` se establece automáticamente en `true`.

<Warning>
  Si quiere que los usuarios finales se autentiquen con passkeys, **debe** tener configurado un método de autenticación alternativo, como correo electrónico o teléfono. No se admite la autenticación solo con passkeys.
</Warning>

Para obtener más información, consulte [Activar y configurar atributos para identificadores flexibles](/es/docs/authenticate/database-connections/activate-and-configure-attributes-for-flexible-identifiers).

<div id="create-a-new-database-connection">
  ## Crear una nueva conexión de base de datos
</div>

Si no tiene una conexión de base de datos existente, cree una con Auth0 Dashboard o la Management API.

<Tabs>
  <Tab title="Auth0 Dashboard" icon="browser">
    1. Vaya a [**Auth0 Dashboard > Authentication > Database**](https://manage.auth0.com/#/connections/database). Seleccione **Create DB Connection** para crear la conexión.
    2. Introduzca un nombre único para la conexión.
    3. Elija uno o más atributos para que los usuarios finales inicien sesión o se registren.
    4. Seleccione los métodos de autenticación. Puede configurar estos métodos con más detalle una vez creada la conexión.
    5. Active **Disable Sign Ups** si no quiere que los usuarios se registren mediante endpoints públicos.
    6. Active **Promote Connection to Domain Level** si quiere usar esta conexión con aplicaciones de terceros.
    7. Seleccione **Create**.

    Para una conexión realmente sin contraseña, complete estos pasos adicionales:

    1. En la nueva conexión, seleccione la pestaña **Attributes**.
    2. Para desactivar Username como identificador, seleccione **Configure** y desactive **Use Username as Identifier**.
    3. Para configurar los identificadores de correo electrónico y teléfono, seleccione **Configure**.

    * Para los atributos de correo electrónico, seleccione **One-Time Password (OTP)** en Verification Methods y habilite **Verify email on sign up** para una configuración realmente sin contraseña. Esto garantiza que `email_verified` se establezca automáticamente para que a los usuarios siempre se les solicite un OTP al iniciar sesión y al registrarse.

    4. Seleccione **Save**.

    5. Configure los ajustes de los métodos de autenticación correspondientes a los identificadores elegidos. No puede desactivar la contraseña a menos que tenga configurado `phone_otp` y/o `email_otp`.

    6. En la configuración de Password, seleccione **Policy** y elija **Block** para:

       * Password on Login
       * Password on Signup
       * Self-service change password (updates automatically)

    7. Active **Support users without a password**.
           <Warning>
             Puede producirse un error si no activa **Support users without a password**.
           </Warning>

    8. Seleccione **Save**. En el aviso, seleccione **Continue** para confirmar que entiende que los usuarios existentes pueden verse afectados.

    9. Vaya a la pestaña **Applications** y habilite la conexión para la aplicación o API.
  </Tab>

  <Tab title="Management API" icon="code">
    <Callout icon="file-lines" color="#0EA5E9" iconType="regular">
      Para usar la Management API, necesita un [token de acceso de la Management API](/es/docs/secure/tokens/access-tokens/management-api-access-tokens/get-management-api-access-tokens-for-production).
    </Callout>

    Llame al endpoint [Create a Connection](https://auth0.com/docs/api/management/v2/connections/post-connections). Use la opción `default_method` para establecer el primer método de autenticación para cada identificador.

    ```bash expandable lines theme={null}
    curl --location 'https://YOUR_AUTH0_TENANT/api/v2/connections' \
    --header 'Authorization: Bearer YOUR_MANAGEMENT_API_TOKEN' \
    --header 'Accept: application/json, text/plain, */*' \
    --header 'Content-Type: application/json' \
    --data '{
      "name": "YOUR_CONNECTION_NAME",
      "strategy": "auth0",
      "is_domain_connection": false,
      "options": {
        "disable_signup": false,
        "attributes": {
          "email": {
            "identifier": {
              "active": true,
              "default_method": "email_otp"
            },
            "profile_required": true,
            "signup": {
              "status": "required",
              "verification": {
                "active": true
              }
            },
            "verification_method": "otp",
            "unique": true
          },
          "phone_number": {
            "identifier": {
              "active": true,
              "default_method": "password"
            },
            "profile_required": true,
            "signup": {
              "status": "required",
              "verification": {
                "active": true
              }
            }
          },
          "username": {
            "identifier": {
              "active": true
            },
            "profile_required": true,
            "signup": {
              "status": "required"
            },
            "validation": {
              "min_length": 1,
              "max_length": 15,
              "allowed_types": {
                "email": false,
                "phone_number": false
              }
            }
          }
        },
        "authentication_methods": {
          "password": {
            "enabled": true
          },
          "passkey": {
            "enabled": false
          },
          "email_otp": {
            "enabled": true
          },
          "phone_otp": {
            "enabled": true
          }
        }
      }
    }'
    ```
  </Tab>
</Tabs>

<div id="update-existing-connections">
  ## Actualizar conexiones existentes
</div>

Si tiene conexiones de base de datos existentes, actualice la configuración de inicio de sesión sin contraseña en Auth0 Dashboard o Management API.

<Tabs>
  <Tab title="Auth0 Dashboard" icon="browser">
    1. **Abra la conexión**: Vaya a [**Auth0 Dashboard > Authentication > Database**](https://manage.auth0.com/#/connections/database) y seleccione la conexión que desea actualizar.
    2. **Active Attributes**: En la pestaña **Attributes**, seleccione **Activate** para habilitar la New Attributes Configuration.
    3. **Agregue los atributos de correo electrónico y teléfono**: Seleccione **+ Add Attributes** y agregue Email y Phone Number si todavía no están presentes.

           <Callout icon="file-lines" color="#0EA5E9" iconType="regular">
             En una conexión verdaderamente sin contraseña (OTP), el identificador `username` no es compatible.
           </Callout>
    4. **Habilite los métodos de autenticación OTP**: En la pestaña **Authentication Methods**:
       * Configure Phone en **Allow** Phone OTP y guarde los cambios.
       * Configure Email en **Allow** Email OTP y guarde los cambios.
    5. **Bloquee la autenticación por contraseña**: En la configuración de Password, elija **Policy** y seleccione **Block** para:

       * Password on Login
       * Password on Signup
       * Self-service change password

       Active **Support users without a password**.

           <Warning>
             Es posible que reciba un error si no activa **Support users without a password**.
           </Warning>
    6. **Guarde**: Seleccione **Save**.
  </Tab>

  <Tab title="Management API" icon="code">
    <Callout icon="file-lines" color="#0EA5E9" iconType="regular">
      Para usar Management API, necesita un [token de acceso de Management API](/es/docs/secure/tokens/access-tokens/get-management-api-access-tokens-for-production).
    </Callout>

    Llame al endpoint [Update a Connection](https://auth0.com/docs/api/management/v2/connections/patch-connections-by-id). Agregue la opción `default_method` para establecer el primer método de autenticación. Para los atributos de Email, configure `password` o `email_otp`. Para los atributos de Phone, configure `password` o `phone_otp`.

    ```bash theme={null}
    curl -L -X PATCH "https://YOUR_AUTH0_TENANT/api/v2/connections/<connection_id>" \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer YOUR_MANAGEMENT_API_TOKEN" \
    -d '{
      "options": {
        "passwordPolicy": "none",
        "authentication_methods": {
          "password": { "enabled": true },
          "passkey": { "enabled": true },
          "email_otp": { "enabled": true },
          "phone_otp": { "enabled": true }
        },
        "attributes": {
          "email": {
            "signup": {
              "status": "required",
              "verification": { "active": true }
            },
            "unique": true,
            "identifier": {
              "active": true,
              "default_method": "email_otp"
            },
            "profile_required": true,
            "verification_method": "otp"
          },
          "phone_number": {
            "signup": {
              "status": "required",
              "verification": { "active": true }
            },
            "identifier": {
              "active": true,
              "default_method": "phone_otp"
            },
            "profile_required": true
          }
        }
      }
    }'
    ```
  </Tab>
</Tabs>

<div id="use-auth0-actions">
  ## Usa Auth0 Actions
</div>

Para obtener más información sobre los factores de autenticación sin contraseña en las conexiones de base de datos, configura atributos con Auth0 Actions.

<div id="post-login-trigger">
  ### Trigger de post-login
</div>

El trigger `post-login` se activa después de que un usuario se autentica, pero antes de que el servidor de autorización devuelva un token. El objeto `event.authentication` en [Auth0 Dashboard > Actions > Triggers > Post Login](https://manage.auth0.com/#/actions/flows) expone los siguientes métodos:

| Método                     | Parámetro | Descripción                                                                                 |
| -------------------------- | --------- | ------------------------------------------------------------------------------------------- |
| OTP por correo electrónico | `email`   | OTP por correo electrónico que se utiliza para autenticar al usuario como primer factor.    |
| OTP por SMS                | `sms`     | OTP por teléfono (SMS) que se utiliza para autenticar al usuario como primer factor.        |
| OTP por voz                | `tel`     | OTP por teléfono mediante voz que se utiliza para autenticar al usuario como primer factor. |
| Contraseña                 | `pwd`     | Contraseña que se utiliza para autenticar al usuario como primer factor.                    |

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  `email_verified` y `phone_verified` se establecen automáticamente en el perfil del usuario cuando un usuario se autentica mediante OTP por correo electrónico u OTP por teléfono. Si antes usabas una Action de post-login para establecer manualmente estos indicadores, puedes eliminar esa solución temporal.
</Callout>

Usa `event.authentication` para:

* Detectar qué factor sin contraseña completó el usuario (`email`, `sms`, `tel` o `pwd`)
* Agregar claims personalizados a los tokens según el método de autenticación
* Ejecutar lógica de forma condicional según cómo se autenticó el usuario

<div id="example">
  #### Ejemplo
</div>

En el siguiente ejemplo, se lee `event.authentication.methods` para detectar qué factor sin contraseña completó el usuario y se añade como una claim personalizada al token de ID.

```javascript theme={null}
exports.onExecutePostLogin = async (event, api) => {
  if (!event.authentication?.methods || event.authentication.methods.length === 0) {
    return;
  }

  if (event.connection.name !== 'YOUR_AUTH0_CONNECTION') {
    return;
  }

  const firstFactor = event.authentication.methods[0];

  if (firstFactor.name === 'email') {
    api.idToken.setCustomClaim('https://your-app.com/auth_method', 'email_otp');
  } else if (firstFactor.name === 'sms' || firstFactor.name === 'tel') {
    api.idToken.setCustomClaim('https://your-app.com/auth_method', 'phone_otp');
  } else if (firstFactor.name === 'pwd') {
    api.idToken.setCustomClaim('https://your-app.com/auth_method', 'password');
  }
};
```

<div id="post-challenge-trigger">
  ### Trigger posterior al desafío
</div>

El trigger `post-challenge` se ejecuta después de que los usuarios completan un desafío, como un restablecimiento de contraseña, la validación del número de teléfono o MFA. El objeto `event.authentication` en [Auth0 Dashboard > Actions > Triggers > password-reset-post-challenge](https://manage.auth0.com/#/actions/flows) expone los siguientes atributos:

| Atributo           | Parámetro      | Descripción                                                                    |
| ------------------ | -------------- | ------------------------------------------------------------------------------ |
| Correo electrónico | `email`        | Restablecimiento de contraseña con OTP por correo electrónico o enlace mágico. |
| Teléfono           | `phone_number` | Restablecimiento de contraseña con OTP enviado al teléfono.                    |

<div id="example">
  #### Ejemplo
</div>

El siguiente ejemplo lee `event.authentication.methods` para detectar qué factor de autenticación sin contraseña completó el desafío y lo añade como un claim personalizado en el token de ID.

```javascript theme={null}
exports.onExecutePostChallenge = async (event, api) => {
  if (!event.authentication?.methods || event.authentication.methods.length === 0) {
    return;
  }

  if (event.connection.name !== 'YOUR_AUTH0_CONNECTION') {
    return;
  }

  const firstFactor = event.authentication.methods[0];

  if (firstFactor.name === 'email') {
    api.idToken.setCustomClaim('https://your-app.com/challenge_method', 'email_otp');
  } else if (firstFactor.name === 'phone_number') {
    api.idToken.setCustomClaim('https://your-app.com/challenge_method', 'phone_otp');
  }
};
```

<div id="benefits">
  ## Beneficios
</div>

* **Implementación simplificada:** Menos conexiones que configurar y mantener. No es necesario vincular cuentas, a menos que se usen conexiones sociales/federadas junto con conexiones de base de datos.
* **Mejora de la experiencia del usuario**: Ofrece combinaciones de OTP por correo electrónico y teléfono con contraseñas, passkeys e inicio de sesión social/federado, todo desde la misma experiencia de identificador primero en Universal Login.
* **Flujos de registro flexibles**: Configure los atributos de correo electrónico y teléfono como opcionales durante el registro, lo que permite a los usuarios registrarse solo con un correo electrónico o solo con un número de teléfono; ideal para experiencias centradas en dispositivos móviles o solo con correo electrónico.
* **OTP por voz**: El OTP por voz se incluye como primer factor cuando se configura en la experiencia telefónica unificada.

<div id="limitations">
  ## Limitaciones
</div>

* Disponible solo para flujos basados en Universal Login; todavía no es compatible con la autenticación basada en API.
* La autenticación sin contraseña para conexiones de base de datos no se admite con Classic Login.
* La autenticación sin contraseña para conexiones de base de datos no admite Implicit Signup & Login.
* En las conexiones heredadas sin contraseña, no había diferencias en la experiencia de usuario entre el registro y el inicio de sesión. Las conexiones de base de datos distinguen entre la experiencia de registro y la de inicio de sesión, lo que requiere un registro y un inicio de sesión *explícitos*.
  * Si un usuario sin una identidad de Auth0 entra en el flujo de inicio de sesión, el sistema no lo registrará automáticamente. El usuario recibe un error después de validar el OTP.
  * Si un usuario con una identidad de Auth0 entra en el flujo de registro, recibe un error después de validar el OTP.

<div id="learn-more">
  ## Más información
</div>

* [Autenticación sin contraseña](/es/docs/authenticate/passwordless)
* [Limitaciones de las conexiones sin contraseña](/es/docs/authenticate/passwordless/passwordless-connection-limitations)
* [Prácticas recomendadas para las conexiones sin contraseña](/es/docs/authenticate/passwordless/best-practices)
* [Activar y configurar atributos para identificadores flexibles](/es/docs/authenticate/database-connections/activate-and-configure-attributes-for-flexible-identifiers)
