MFA y step-up
Más garantía cuando de verdad importa.
TOTP y códigos de recuperación para la persona; step-up en el servidor para las acciones que cambian la seguridad de todos.
- Descubrir
- Autorizar
- Probar
- Verificar
- Consentir
- Emitir
- Sesión
- Revocar
TOTP: alta, confirmación, verificación y baja.
Seis dígitos cada 30 segundos (SHA-1, RFC 6238). El secreto se cifra en reposo y la baja exige step-up.
/api/auth/totp/enroll- Genera el secreto para el autenticador
/api/auth/totp/confirm- Confirma con un primer código
/api/auth/totp/verify- Eleva la sesión a AAL2 (AMR otp)
/api/auth/totp/disable- Requiere step-up
Códigos de recuperación: se ven una vez, se usan una vez.
Se generan ocho, con step-up; regenerarlos invalida los anteriores. Se guardan como hash y cada uno se consume una sola vez.
Códigos sintéticos de demostración. Los reales tienen otro formato y nunca se muestran aquí.
Generación con step-up: los códigos anteriores se borran.
Acciones con step-up hoy.
La lista viene del código: cada acción tiene su identificador de política.
| Acción | Política |
|---|---|
| Cambiar la contraseña | password.change |
| Desactivar TOTP | totp.disable |
| Regenerar códigos de recuperación | recovery.generate |
| Registrar o borrar una passkey | passkey.register, passkey.delete |
| Revocar la sesión de otra persona | session.revoke.other |
| Rotar el secreto de un cliente | client.secret.rotate |
| Modificar federación | federation.modify |
| Prepublicar o activar llaves de firma | signing_key.rotate |
| Cambiar políticas de seguridad | security.policy.modify |
| Asignar roles privilegiados | role.assign.privileged |
Escalera de garantía
| Nivel | AMR | Cómo | Habilita |
|---|---|---|---|
urn:auth4us:aal1 | pwd | Contraseña | Trabajar con la sesión |
urn:auth4us:aal2 | otp | Contraseña + TOTP | Acciones sensibles (en los últimos 15 min) |
urn:auth4us:aal2 | hwk | Passkey | Acciones sensibles; obligatorio si el tenant exige hardware |
La autenticación debe ser de los últimos 15 minutos. Consumir un código de recuperación no eleva hoy la sesión.
Step-up: la compuerta está en el servidor.
Una sesión con solo contraseña no puede ejecutar acciones sensibles, aunque la interfaz lo intente.
AMR pwd, nivel aal1. Puede trabajar; no puede cambiar lo que protege a otros.
La petición llega a una ruta protegida por stepup.ForAction.
Sin AAL2 reciente, la respuesta es 403 auth.step_up y la interfaz pide TOTP o passkey.
La prueba eleva la sesión a aal2 con AMR otp o hwk.
La acción continúa y queda en la auditoría.
Veámoslo con tus aplicaciones.
Una demostración con datos sintéticos: tus flujos, tus métodos de entrada y tu modelo de tenants.