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

# Habilitar y configurar la autenticación con claves de acceso para conexiones de base de datos

> Use el Auth0 Dashboard para habilitar las claves de acceso como método de autenticación en una conexión de base de datos y configurar la interfaz de usuario de autenticación con claves de acceso, la inscripción progresiva y la inscripción local.

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>;
};

<div id="prerequisites">
  ## Requisitos previos
</div>

Antes de poder habilitar las claves de acceso para una conexión de base de datos, debe completar los siguientes requisitos previos.

En su inquilino, debe:

* [Habilitar Universal Login](/es/docs/authenticate/login/auth0-universal-login/universal-login-vs-classic-login/universal-experience).

* [Habilitar la autenticación Identifier First](/es/docs/authenticate/login/auth0-universal-login/identifier-first).

* Deshabilitar las páginas de inicio de sesión personalizadas. En el Auth0 Dashboard, vaya a [Marca > Universal Login > Administrar Classic Login > Inicio de sesión](https://manage.auth0.com/#/login_page) y desactive el interruptor **Custom Login Page**.

En su conexión de base de datos, debe:

* Deshabilitar [la obligatoriedad de usernames](/es/docs/authenticate/database-connections/require-username) para su conexión de base de datos o, como alternativa, [habilitar Flexible Identifiers](/es/docs/authenticate/database-connections/flexible-identifiers-and-attributes).

* Deshabilitar [el uso de su propia base de datos](/es/docs/authenticate/database-connections/custom-db/create-db-connection) o, como alternativa, habilitar [la importación de usuarios](/es/docs/authenticate/database-connections/custom-db/templates) (**Import Users to Auth0**).

  Para usar su propia base de datos sin tener habilitada la importación de usuarios (**Import Users to Auth0**), siga los [requisitos previos adicionales que se indican a continuación para actualizar los scripts de Action de su base de datos](#early-access-use-your-own-database-without-user-import-enabled).

Las conexiones de base de datos con claves de acceso habilitadas también deben seguir teniendo habilitadas las contraseñas. Esto garantiza que los usuarios puedan seguir accediendo a sus cuentas desde navegadores y dispositivos antiguos que quizá todavía no admitan claves de acceso.

### <Badge color="yellow">Acceso anticipado</Badge> Usa tu propia base de datos sin tener habilitada la importación de usuarios

La autenticación con claves de acceso ahora admite el uso de tu propia base de datos sin tener habilitada la importación de usuarios. Esto te permite ofrecer autenticación con claves de acceso en conexiones de base de datos personalizadas mientras sigues autenticando a los usuarios con tu almacén de usuarios externo.

Como requisito previo, debes actualizar los scripts de Action de base de datos Get User y Create [scripts de Action de base de datos](/es/docs/authenticate/database-connections/custom-db/templates) para admitir la gestión de usuarios tanto por identificador como por `user_id`.

<Accordion title="Cómo actualizar los scripts de Action de base de datos para habilitar claves de acceso en tu propia base de datos sin tener habilitada la importación de usuarios">
  <ReleaseStageNotice feature="claves de acceso para usar tu propia base de datos sin tener habilitada la importación de usuarios" stage="ea" terms="true" />

  1. Primero, confirma que la importación de usuarios esté deshabilitada para tu conexión de base de datos.

  2. [Habilita la compatibilidad con el objeto context](/es/docs/authenticate/database-connections/custom-db/create-db-connection#enable-context-object). Esto hace que el parámetro `context` esté disponible en tus scripts de Action de base de datos, lo cual es necesario para admitir búsquedas tanto por identificador como por `user_id`.

  3. El script Get User debe admitir tanto la búsqueda por identificador (`context.identifierType` no está establecido) como la búsqueda por `user_id` (`context.identifierType` está establecido en `user_id`).

     Actualiza tu [script de Action de base de datos Get User](/es/docs/authenticate/database-connections/custom-db/templates/get-user) de `getByEmail` a la función `getUser` proporcionada:

     ```js theme={null}
     function getByEmail(email, callback) { // [!code --] 
     function getUser(identifierValue, context, callback) { // [!code ++] 
         const axios = require('axios');

         // Recupera el identificador del usuario desde context // [!code ++]
         const identifierType = context.identifierType || 'email'; // [!code ++]

         // Reemplaza con tu endpoint externo de recuperación de usuarios 
         const url = configuration.baseAPIUrl
                     + `/get_user/${email}?type=email`; // [!code --]
                     + `/get_user/${identifierValue}?type=${identifierType}`; // [!code ++]

         axios.get(url)
             .then(response => {
                 // Devuelve el objeto de usuario si se encuentra
                 const user = response.data; 
                 return callback(null, {
                     user_id: user.user_id,
                     email: user.email
                     // Opcionalmente incluye otros atributos de usuario 
                 });
             })
             .catch(error => {
                 // Maneja la respuesta de error 
                 return callback(null);
             });
     }
     ```

  4. El script Create debe devolver un perfil de usuario válido. Cuando los atributos están habilitados, el perfil de usuario devuelto debe seguir la misma validación que los scripts Login y Get User. Cuando los atributos no están habilitados, el perfil de usuario devuelto debe incluir el valor `user_id`.

     Actualiza tu [script de Action de base de datos Create](/es/docs/authenticate/database-connections/custom-db/templates/create) para devolver un perfil de usuario válido:

     ```js theme={null}
     function create(user, callback) {
         const axios = require('axios');

         // Reemplaza con tu endpoint externo de creación de usuarios
         const url = 'https://example.com/api/create'; 

         const payload = {
             email: user.email
             // Agrega otras propiedades de usuario según sea necesario
         };

         axios.post(url, payload)
             .then(response => {
                 // Devuelve el objeto de usuario si se creó
                 const createdUser = response.data; 

                 return callback(null, {
                     user_id: createdUser.user_id,
                     email:createdUser.email
                     // Opcionalmente incluye otros atributos de usuario
                 });
             })
             .catch(error => {
                 // Maneja la respuesta de error 
                 return callback(error);
             }); 
     }
     ```
</Accordion>

<div id="configure-passkeys">
  ## Configurar claves de acceso
</div>

Una vez que completes los requisitos previos, puedes usar el Auth0 Dashboard para habilitar y configurar las claves de acceso.

<Steps titleSize="h3">
  <Step title="Abrir la configuración de claves de acceso">
    Ve a [Authentication > Database](https://manage.auth0.com/#/connections/database) y selecciona el nombre de la conexión de base de datos que quieres editar.

    Selecciona la pestaña **Authentication Methods**. Luego, en la sección **Passkey**, selecciona **Configure** para abrir el panel **Passkey**.

    Si todavía no está marcada, marca la opción **Enable passkeys**.
  </Step>

  <Step title="Elegir la interfaz de autenticación con clave de acceso">
    La interfaz de autenticación con clave de acceso determina cómo los usuarios pueden activar la autenticación con clave de acceso durante el inicio de sesión y el registro.

    En la sección **Passkey Authentication UI**, elige una de las tres opciones:

    | Interfaz de autenticación con clave de acceso | Descripción                                                                                                                                                                                                                                          |
    | --------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
    | Botón de clave de acceso y autocompletar      | Los usuarios pueden autenticarse con claves de acceso mediante el autocompletado o el botón de clave de acceso.                                                                                                                                      |
    | Autocompletar                                 | Los usuarios deben iniciar sesión con la función de autocompletado de su navegador para usar claves de acceso. El autocompletado permite seleccionar una cuenta guardada en un menú desplegable en lugar de introducir las credenciales manualmente. |
    | Botón de clave de acceso                      | Los usuarios deben seleccionar el botón **Continue with a passkey** en la pantalla de inicio de sesión.                                                                                                                                              |

    Si el autocompletado no está disponible en el navegador del usuario, este puede iniciar sesión con el botón de clave de acceso (si está habilitado) o con una contraseña.
  </Step>

  <Step title="Habilitar la inscripción progresiva (opcional)">
    La inscripción progresiva solicita a los usuarios que creen una clave de acceso (si aún no lo han hecho) después de iniciar sesión con un identificador y una contraseña. Este paso no es obligatorio, y los usuarios pueden optar por posponer esta acción cada 30 días.

    La inscripción progresiva puede ser útil al migrar usuarios a claves de acceso, ya que facilita la transición entre métodos de autenticación.

    <Callout icon="file-lines" color="#0EA5E9" iconType="regular">
      Al crear una cuenta mediante un [correo electrónico de invitación a la organización](/es/docs/manage-users/organizations/configure-organizations/invite-members), los usuarios no pueden elegir la autenticación con clave de acceso. Puedes habilitar la inscripción progresiva para que estos usuarios puedan crear claves de acceso después de iniciar sesión con una contraseña.
    </Callout>

    La casilla **Progressive Enrollment** está marcada de forma predeterminada, pero puedes desmarcarla para deshabilitarla.
  </Step>

  <Step title="Habilitar la inscripción local (opcional)">
    Cuando un usuario de claves de acceso inicia sesión en un dispositivo nuevo con una clave de acceso multidispositivo, la inscripción local le solicita que cree una clave de acceso local en ese dispositivo. Esto no es obligatorio, por lo que el usuario puede omitir la creación de una clave de acceso local.

    La casilla **Local Enrollment** está marcada de forma predeterminada, pero puedes desmarcarla para deshabilitarla.
  </Step>

  <Step title="Guardar la configuración">
    Selecciona **Save** para guardar los cambios de configuración.

    Si el botón para guardar está deshabilitado, usa la sección **Passkey Authentication Prerequisites** en la parte superior del panel **Passkey** para confirmar que tu inquilino y tu conexión de base de datos estén configurados correctamente.
  </Step>
</Steps>

<div id="next-steps">
  ## Próximos pasos
</div>

Para garantizar la mejor experiencia a los usuarios finales al usar claves de acceso, puede considerar los siguientes pasos adicionales.

<div id="configure-relying-party-id-rp-id">
  ### Configurar el ID de relying party (RP ID)
</div>

Para permitir que los usuarios usen una sola clave de acceso para autenticarse en todos los subdominios (por ejemplo, tanto en una aplicación nativa disponible en `app.example.com` como en una aplicación web disponible en `login.example.com`), puede establecer el RP ID en el dominio principal o raíz.

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  Cuando personaliza el RP ID en Auth0 Dashboard o Management API, todas las claves de acceso de otros dominios dejarán de funcionar y sus usuarios finales deberán volver a inscribirse.
</Callout>

El dominio de su aplicación debe agregarse a la lista de **Allowed Origins (CORS)** en la [configuración de la aplicación](https://manage.auth0.com/#/applications) para que el RP ID funcione correctamente.

Para establecer el RP ID en Auth0 Dashboard:

1. Vaya a **[Auth0 Dashboard > Tenant Settings](https://manage.auth0.com/#/tenant/relying_party_ids)**.
2. Seleccione la pestaña **Relying Party IDs**.
3. Elija **Edit Relying Party ID**.
4. Introduzca el dominio.
5. Si este RP ID es el dominio raíz, marque la casilla para establecer el dominio como predeterminado para su inquilino.
6. Seleccione **Save**.
7. A continuación, vaya a la aplicación para la que desea establecer un ID de relying party.
8. Seleccione la configuración de la aplicación.
9. En la sección **Application URIs**, agregue el dominio de su aplicación en **Allowed Origins (CORS)**.
10. Seleccione **Save**.

<div id="configure-a-custom-domain">
  ### Configurar un dominio personalizado
</div>

Cuando un usuario inscribe una clave de acceso, esta queda asociada al dominio de la <Tooltip tip="Entidad (como un servicio o una aplicación) que depende de un proveedor de identidad de terceros para autenticar a un usuario." cta="Ver glosario" href="/es/docs/glossary?term=relying+party">parte de confianza</Tooltip>. Si el nombre de dominio cambia, cualquier clave de acceso asociada al dominio anterior deja de ser válida.

Considere configurar un [dominio personalizado](/es/docs/customize/custom-domains) para su inquilino antes de habilitar las claves de acceso, a fin de evitar interrupciones para los usuarios finales.

Si tiene habilitados [Múltiples dominios personalizados](/es/docs/customize/custom-domains/multiple-custom-domains) en su inquilino, Auth0 mantiene una relación uno a uno entre un dominio y la clave de acceso asociada a ese dominio.

Los usuarios solo pueden inscribir una clave de acceso para uno de los múltiples dominios personalizados del inquilino (el primero con el que se inscriban). Para el inicio de sesión sin contraseña, el dominio personalizado seleccionado debe aparecer en el Magic Link del flujo de inicio de sesión sin contraseña.

<div id="bypass-multi-factor-authentication">
  ### Omitir la autenticación multifactor
</div>

Si tiene habilitada la [autenticación multifactor](/es/docs/secure/multi-factor-authentication), el comportamiento predeterminado es exigir que se complete una verificación de MFA, independientemente de si el método de autenticación fue una contraseña o una clave de acceso.

Dado el alto nivel de seguridad que proporcionan las claves de acceso, puede [omitir MFA para la autenticación con clave de acceso mediante una Action de post-login](/es/docs/customize/actions/explore-triggers/signup-and-login-triggers/login-trigger#reduce-friction-with-passkeys).
