Saltar al contenido principal
Para usar las funciones de autenticación de canal secundario iniciada por el cliente (CIBA), debes tener un plan Enterprise o un add-on adecuado. Consulta Auth0 Pricing para obtener más información.
Cuando usas notificaciones por correo electrónico con CIBA, el usuario recibe un correo electrónico con un enlace que lo redirige para autenticarse o autorizar una solicitud en el navegador. Al usar notificaciones por correo electrónico con CIBA, el usuario inicia sesión en el dispositivo de consumo, pero completa la autenticación al hacer clic en un enlace enviado a su dirección de correo electrónico verificada. Cuando el usuario hace clic en el enlace de verificación, se le redirige al navegador, lo que crea una sesión que Auth0 usa para seguir el proceso de autenticación y confirmar la identidad del usuario. Esta sesión es necesaria para conectar el dispositivo de autenticación, en este caso el navegador, con el dispositivo de consumo, como una Smart TV. El siguiente diagrama explica el flujo completo de CIBA con notificaciones por correo electrónico:
En las siguientes secciones se explica paso a paso cómo funciona la autenticación de usuarios con CIBA mediante notificaciones por correo electrónico.

Requisitos previos

Para iniciar una solicitud de CIBA por correo electrónico con Auth0, debe:

Paso 1: La aplicación cliente inicia una solicitud de CIBA

Usa las API de búsqueda de usuarios para encontrar al usuario que autoriza para el que deseas iniciar una solicitud de CIBA y obtener su ID de usuario. Una vez que tengas el ID de usuario del usuario que autoriza, usa la Authentication API o nuestros SDKs para enviar una solicitud de CIBA al endpoint /bc-authorize:
curl --location 'https://{YOUR_DOMAIN}.auth0.com/bc-authorize' \
  --header 'Content-Type: application/x-www-form-urlencoded' \
  --data-urlencode 'client_id={YOUR_CLIENT_ID}' \
  --data-urlencode 'client_secret={YOUR_CLIENT_SECRET}' \
  --data-urlencode 'login_hint={ "format": "iss_sub", "iss": "https://{YOUR_DOMAIN}.auth0.com/", "sub": "{USER_ID}" }' \
  --data-urlencode 'scope={SCOPES}' \
  --data-urlencode 'binding_message={BINDING_MESSAGE}'
ParámetrosDescripción
tenantNombre del inquilino. También puede ser un dominio personalizado. Si se usa el formato iss_sub, el nombre del inquilino se pasa en el claim iss.
client_idIdentificador de la aplicación cliente.
client_secretMétodo de autenticación del cliente que se usa para la autenticación del usuario con CIBA, como Secreto del cliente, Private Key JWT o autenticación mTLS. Si usa Private Key JWT o mTLS, no necesita incluir el secreto del cliente.
scopeDebe incluir openid.

El scope puede incluir opcionalmente offline_access para solicitar un Token de actualización. Sin embargo, para la autorización puntual de una transacción con el flujo de CIBA, no se necesita un token de actualización y no tiene ningún significado en este contexto.
user_idID de usuario del usuario autorizador, que se pasa dentro de la estructura login_hint. Si se usa el formato iss_sub, el ID de usuario se pasa en el claim sub.

El ID de usuario puede tener un formato distinto según el proveedor externo.
requested_expiryLa duración máxima, en segundos, durante la que la sesión de CIBA debe ser válida. La expiración solicitada del flujo de CIBA debe estar entre 1 y 259200 segundos (72 horas), y el valor predeterminado es 300 segundos. Incluya el parámetro requested_expiry para establecer una expiración personalizada para el flujo de CIBA.

El parámetro requested_expiry ayuda a determinar qué canal de notificación usa CIBA:
  • Si establece requested_expiry en un valor de 300 segundos o menos, CIBA usa el canal de notificaciones push móviles si está habilitado. Si no ha configurado MFA en su inquilino, la solicitud de CIBA falla.
  • Si establece requested_expiry en un valor de entre 301 y 259200 segundos (72 horas), CIBA usa el canal de notificación por correo electrónico si está habilitado.
binding_messageMensaje legible que se usa para vincular el flujo de CIBA entre los dispositivos de autenticación y de consumo. El mensaje de vinculación es obligatorio y puede tener hasta 64 caracteres. Use solo caracteres alfanuméricos y +-_.,:#.
Se aplica un límite de tasa por usuario: al usuario autorizador no se le enviarán más de 5 solicitudes por minuto.

Paso 2: El Tenant de Auth0 confirma la solicitud de CIBA

Si el Tenant de Auth0 recibe correctamente la solicitud POST, deberías recibir una respuesta que contenga un auth-req-id que haga referencia a ella:
{
    "auth_req_id": "eyJh...",
    "expires_in": 300,
    "interval": 5
}
El valor auth_req_id se envía al endpoint /token para consultar si el flujo CIBA se ha completado.

Paso 3: La aplicación cliente consulta la respuesta

Use Authentication API o nuestros SDKs para llamar al endpoint /token con el grant type urn:openid:params:grant-type:ciba y el auth_req_id que recibió del endpoint /bc-authorize:
curl --location 'https://{YOUR_DOMAIN}.auth0.com/oauth/token' \
  --header 'Content-Type: application/x-www-form-urlencoded' \
  --data-urlencode 'client_id={YOUR_CLIENT_ID}' \
  --data-urlencode 'client_secret={YOUR_CLIENT_SECRET}' \
  --data-urlencode 'auth_req_id={AUTH_REQ_ID}' \
  --data-urlencode 'grant_type=urn:openid:params:grant-type:ciba'
Hasta que el usuario que autoriza apruebe la transacción, debería recibir la siguiente respuesta:
{
    "error": "authorization_pending",
    "error_description": "La autorización del usuario final está pendiente"
}
Hay un intervalo de espera de aproximadamente cinco segundos entre sondeos. Si realiza sondeos con demasiada frecuencia, recibirá la siguiente respuesta, donde la descripción varía según el intervalo de retroceso:
{
"error": "slow_down",
"error_description": "You are polling faster than allowed. Try again in 10 seconds."
"interval": 10
}
Para resolver el error, espere hasta el siguiente intervalo (en segundos) antes de consultar el endpoint /token. El Servidor de autorización de Auth0 usa login_hint, que contiene el ID del usuario que autoriza, para iniciar la autenticación del usuario en el dispositivo de autenticación:
  • El Servidor de autorización de Auth0 envía un correo electrónico a la dirección de correo electrónico verificada del usuario.
  • El correo electrónico contiene un enlace de verificación en el que el usuario debe hacer clic para autenticarse. El binding_message aparece como el código de solicitud.
  • El enlace dirige al usuario al navegador mediante una solicitud al endpoint /bc-verify, donde el parámetro de consulta consent hace referencia a la solicitud CIBA pendiente de consentimiento.
Auth0 envía un correo electrónico a la dirección de correo electrónico verificada del usuario

Paso 5: El usuario se autentica en el navegador

Si no se encuentra ninguna sesión activa, el enlace de verificación le pedirá al usuario que se autentique. El usuario hace clic en el enlace para continuar con la autenticación. Para autenticarse, el usuario introduce su dirección de correo electrónico verificada y su contraseña. Debe usar las credenciales correspondientes al parámetro login_hint enviado al endpoint /bc-authorize cuando la aplicación cliente inicia una solicitud de CIBA. De lo contrario, se le mostrará un mensaje de error y tendrá que cerrar sesión y volver a intentarlo.
El usuario se autentica en el navegador
Al igual que en un flujo de inicio de sesión estándar, el desencadenador post-login de Actions se ejecuta en el flujo de CIBA con correo electrónico, lo que permite a los clientes proporcionar lógica personalizada para aplicar políticas de control de acceso o solicitar factores MFA adicionales. Cuando se ejecuta desde un enlace de verificación de CIBA, el valor de event.transaction.protocol es oidc-ciba-web-link, lo que le permite aplicar reglas personalizadas a este tipo específico de inicio de sesión. Para obtener más información, consulte Login Trigger. Una vez autenticado, el navegador presenta al usuario los datos de consentimiento de la API de Consent de Auth0, que incluye binding_message, scope y audience. Los alcances se filtran según su política de RBAC. Para obtener más información, consulte Role-Based Access Control. El siguiente ejemplo de código muestra una respuesta de ejemplo de la API de Consent de Auth0:
{
  "id": "cns_abc123",
  "requested_details": {
    "audience": "https://$tenant.auth0.com/userinfo",
    "scope": ["openid"],
    "binding_message": "21-49-38"
  },
  "created_at": 1746693720
  "expires_at": 1746693750
}
En este punto, el usuario puede aceptar o denegar la solicitud de autenticación.

Paso 6: El navegador envía la respuesta del usuario de nuevo a Auth0

El navegador envía la respuesta del usuario de nuevo a Auth0. Según el usuario acepte o rechace la solicitud de autenticación, Auth0 muestra las siguientes pantallas de consentimiento, que debe personalizar configurando las pantallas de consentimiento:

El usuario acepta la solicitud de autenticación

El usuario acepta la solicitud de autenticación

El usuario rechaza la solicitud de autenticación

El usuario acepta la solicitud de autenticación

Paso 7: Auth0 recibe la respuesta del usuario después de que finaliza el flujo

La aplicación cliente completa el sondeo al recibir una respuesta del endpoint /token. Un flujo CIBA siempre requiere una respuesta del usuario que autoriza, ya sea de aprobación o rechazo, y no se verifican las autorizaciones existentes.

Paso 8: Auth0 devuelve el token de acceso a la aplicación cliente

Si el usuario rechaza la solicitud por correo electrónico, Auth0 devuelve a la aplicación cliente una respuesta de error como la siguiente:
{
    "error": "access_denied",
    "error_description": "El usuario final denegó la solicitud de autorización o ha caducado"
}
Si el usuario aprueba la solicitud enviada por correo electrónico, Auth0 devuelve a la aplicación cliente un como el siguiente:
{
    "access_token": "eyJh...",
    "id_token": "eyJh...",
    "expires_in": 86400,
    "scope": "openid",
    "token_type": "Bearer"
}
refresh_token solo estará presente si se incluyó el scope offline_access en la solicitud inicial de /bc-authorize.

Más información