El restablecimiento de contraseña utiliza tokens hash de un solo uso, respuestas idénticas para cuentas desconocidas, revocación de la familia de sesiones al tener éxito, y limitadores basados en el hash de la cuenta más el rango de red para resistir la enumeración y el desbordamiento.
Estado del paquete: contexto de referencia listo para revisión humana. El contrato y los escenarios de prueba están completos, pero no se afirma que una implementación adoptante los haya superado.
Decisión
Las cuentas de contraseña recuperan el acceso mediante un token de un solo uso y con propósito específico. Solo se almacena un resumen. Solicitar un restablecimiento siempre devuelve la misma aceptación pública, exista o no el identificador; el correo se envía solo para cuentas conocidas. Una solicitud posterior invalida los tokens no usados previamente. Completar un restablecimiento revoca toda la familia de sesiones del usuario y requiere una autenticación nueva. Los limitadores se aplican a un hash del identificador y al rango de red de forma independiente, y las respuestas limitadas aún se niegan a revelar la existencia de la cuenta.
Alcance
- Solicitud, emisión, consumo, limitación, resistencia a la enumeración y revocación de sesión posterior al éxito para cuentas con contraseña.
- Revocación familiar a través del paquete relacionado de ciclo de vida de sesión.
Fuera de este bloque
- Enlaces mágicos sin contraseña, hashing de contraseña para el nuevo secreto, suplantación por soporte al cliente y arquitectura de entrega por SMS.
Contrato
- Las respuestas públicas a la solicitud son idénticas para identificadores conocidos y desconocidos en estado, código del cuerpo y clase de temporización.
- Los verificadores almacenados son resúmenes; el token en bruto aparece solo en el mensaje fuera de banda y nunca se registra.
- El consumo es atómico desde emitido hasta consumido y no puede tener éxito dos veces.
- El consumo exitoso revoca la familia de sesiones definida por el bloque de sesión relacionado y no mantiene válida la cookie antigua.
- Las claves de limitación son hash de cuenta y rango de red; alcanzar cualquiera de los presupuestos devuelve RESET_THROTTLED con el mismo cuerpo seguro contra enumeración.
- Emitir un nuevo token marca como inválidos los tokens no usados emitidos previamente para ese propósito.
Guía de implementación
- Normalizar identificadores antes de hashear las claves de limitación cuando el sistema de cuentas los trate como iguales. Vincular tokens al propósito password-reset para que un token de inicio de sesión no pueda reutilizarse aquí.
- Realizar la actualización de contraseña, consumo del token y revocación de la familia de sesiones en una sola transacción. No enviar correo de cuenta no existente.
Manejo de fallos y salvaguardas
- Los tokens expirados, consumidos y desconocidos muestran la misma acción de recuperación. Si el consumo tiene éxito y la revocación de sesión falla parcialmente, reintentar la revocación; no deshacer el cambio de contraseña.
- Se rechazan URLs de redirección controladas por el atacante; el destino es una ruta de aplicación en lista blanca capturada en el momento de la emisión.
Verificación y operaciones
- Comparar trazas de solicitudes conocidas versus desconocidas para clase de temporización y cuerpo. Consumir un token dos veces y afirmar un único cambio de contraseña. Probar que las sesiones hermanas mueren tras el éxito.
- Alertar sobre saturación de limitadores por rango, lo que puede indicar enumeración distribuida.
Los ejemplos con apariencia ejecutable en este paquete son fixtures y contratos de aceptación. Ejecute
python tools/validate.py desde la raíz de la colección para verificar la estructura y metadatos del paquete; luego
implemente y ejecute los escenarios en el repositorio objetivo.
Suposiciones para adopción
- Los nombres y valores numéricos en
example.yamlson un perfil de adopción, no valores predeterminados universales. - El equipo adoptante debe mapear actores, clases de datos, vocabulario de errores y propiedad a su sistema.