PUT methods/{name}/ y {"enabled": true} en la API de gestión de autenticación de tu aplicación, o desde la consola. El inicio de sesión alojado muestra solo los métodos que hayas activado.
Cada una de las siguientes llamadas JSON empieza con un
transaction de POST authorize/. Esa transacción dura 10 minutos. Un inicio de sesión correcto devuelve {code, redirect_uri, state}. Canjea el código en POST token/ en un plazo de 60 segundos (consulta tokens y JWKS).
En lugar de un código, una llamada de inicio de sesión puede devolver uno de estos pasos. Completa el paso y después recibirás el código.
Contraseña
POST password/ recibe transaction, email y password.
- Una contraseña debe cumplir tu
password_min_length(8, 10, 12 o 14 caracteres; 10 por defecto). Las contraseñas comunes y las formadas solo por números se rechazan conpassword_policy. Cuando la comprobación de contraseñas comprometidas está activada, una contraseña comprometida conocida se rechaza conpassword_breached. - Solo las personas con un correo electrónico verificado pueden iniciar sesión con contraseña.
- Una contraseña incorrecta, un correo electrónico desconocido, un correo electrónico no verificado, una cuenta bloqueada temporalmente y una cuenta bloqueada reciben todos la misma respuesta:
400 {"error": "invalid_credentials"}. Tu interfaz no puede saber cuál de ellos fue, y un atacante tampoco.
Registro
El registro verifica primero el correo electrónico. InvocaPOST email/start/ con purpose: "signup", email y password, y después a POST email/complete/ con el código. La cuenta se crea con el correo electrónico verificado.
signup_policydecide quién puede registrarse:anyone,invited(solo con un enlace de invitación) oallowed_domains.- Con
allow_subaddresses: false(el valor por defecto), se rechaza una dirección con+en la parte local. - Cuando tu marca define enlaces a los términos o a la política de privacidad, el formulario de registro alojado pide a la persona que los acepte.
Código por correo electrónico
POST email/start/ recibe transaction, purpose (login o signup) y email, y devuelve 202 {challenge, expires_in: 600}. La persona recibe un código de 6 dígitos que dura 10 minutos.
POST email/complete/ recibe transaction, purpose, challenge y code. Tienes 5 intentos; después, la persona debe solicitar un código nuevo. La página alojada ofrece un código nuevo pasados 30 segundos.
Un código de inicio de sesión para una dirección sin cuenta crea una cuando tu signup_policy lo permite. Así funciona el registro sin contraseña.
Enlace mágico
La página alojada envía un enlace de inicio de sesión que dura 15 minutos. Sigue vinculado a la transacción PKCE original, por lo que el enlace solo funciona en el flujo que lo inició. La persona confirma el inicio de sesión en la página que abre el enlace. No hay ningún endpoint JSON para los enlaces mágicos.Código telefónico
POST phone/start/ recibe transaction, phone y un channel opcional (sms, el valor por defecto, o whatsapp). El número se normaliza al formato E.164. Devuelve 202 {challenge, expires_in: 600}.
POST phone/complete/ recibe transaction, challenge y el code de 6 dígitos. Tienes 5 intentos.
- Los códigos telefónicos se envían mediante la verificación telefónica de Didit. Activa el método con el
workflow_idde un flujo que incluya la verificación telefónica. - Un primer inicio de sesión por teléfono crea una cuenta solo cuando
signup_policyesanyone. - Si la entrega falla, la solicitud devuelve
503 {"error": "delivery_unavailable"}.
Passkeys
Las passkeys usan WebAuthn. La parte de confianza (relying party) es el origen de inicio de sesión de tu aplicación. Didit solicita una credencial detectable (resident key) y siempre exige la verificación del usuario, como una huella dactilar, el rostro o el PIN del dispositivo. Didit no solicita atestación.- Un desafío de passkey dura 5 minutos.
- Para añadir una passkey se necesita una sesión creada en los últimos 5 minutos. De lo contrario, la llamada devuelve
403 {"error": "reauthentication_required"}. Primero haz que la persona vuelva a iniciar sesión. - Un inicio de sesión con passkey cuenta como autenticación multifactor.
- Después del registro, la página alojada ofrece añadir una passkey (
passkeys/setup/begin/ypasskeys/setup/complete/). - Las apps de Android registradas en la aplicación pueden usar las mismas passkeys.
Inicio de sesión social
El inicio de sesión con Google, Microsoft, Apple y GitHub usa las credenciales de tu propia aplicación OAuth, que se configuran conPUT methods/{provider}/ y credentials: {client_id, client_secret}. El callback del proveedor está en tu origen de inicio de sesión.
La primera vez que alguien inicia sesión con un proveedor, además demuestra que es el titular de la dirección de correo electrónico mediante un código (POST social/email/start/ y POST social/email/verify/). Los inicios de sesión posteriores con ese proveedor omiten este paso.
GitHub no puede demostrar un inicio de sesión reciente, por lo que no se ofrece cuando envías prompt=login o max_age.
SSO de organización
El SSO de organización permite que la empresa de un cliente inicie sesión a través de su propio proveedor de identidad SAML u OIDC. Configúralo para cada organización cliente enorganizations/{id}/sso/ con protocol (saml u oidc), enabled y config.
- Puedes enviar al equipo de TI del cliente un enlace de configuración válido durante 7 días.
- Los metadatos de tu proveedor de servicios SAML se publican en
{origin}/sso/saml/metadata/. - El inicio de sesión alojado determina la conexión a partir del dominio de correo electrónico verificado de la persona, o a partir de
organization=<slug>en la URL de inicio de sesión.
Didit ID Wallet
Las personas que ya se verificaron con Didit pueden iniciar sesión con su Didit ID Wallet. Este método está siempre activado. El campoverified_identity de la sesión contiene entonces lo que la persona eligió compartir.
MFA
El segundo factor es una aplicación de autenticación (TOTP) con códigos de recuperación, o una passkey.mfa_policydecide quién debe usar MFA:optional,everyoneuorganization_admins(el valor predeterminado). Quien haya registrado una aplicación de autenticación debe usarla siempre.- Para registrar una aplicación de autenticación, invoca
POST mfa/enroll/con una sesión reciente (creada en los últimos 5 minutos). Devuelve{challenge, uri}; muestra laurien forma de código QR. Después, envía el primer código aPOST mfa/confirm/. La respuesta contiene 10 códigos de recuperación de un solo uso. Muéstralos una sola vez. - Al iniciar sesión, envía un código TOTP o de recuperación a
POST mfa/complete/junto con elchallenge. Dispones de 5 intentos. Para usar una passkey en su lugar, invocaPOST mfa/passkey/begin/yPOST mfa/passkey/complete/. - Los códigos usan intervalos de 30 segundos. Un código que ya se aceptó no puede volver a usarse.
- Los códigos por SMS y por correo electrónico no están disponibles como segundo factor.
Contraseña olvidada y restablecimiento
POST password-reset/start/ recibe email y devuelve 202 {"status": "sent", "expires_in": 1800}. La respuesta es la misma tanto si la dirección tiene una cuenta como si no. El enlace de restablecimiento es válido durante 30 minutos.
POST password-reset/complete/ recibe token y password y devuelve {"status": "password_changed"}. Además:
- elimina un bloqueo,
- cierra todas las sesiones cuando
revoke_on_password_changeestá activado (el valor predeterminado), - invalida los demás códigos y enlaces pendientes de esa persona.
Invitaciones
Consignup_policy: "invited", solo las personas invitadas pueden registrarse. Un enlace de invitación es válido durante 7 días y abre la página alojada /invite.
Continúa con tokens y JWKS, o consulta protección contra bots para conocer los bloqueos y los desafíos.