Fix: con la IP bloqueada por intentos fallidos, el login responde 429 aunque...
Qué
Con la IP ya bloqueada por el límite de intentos fallidos (20 en 10 minutos), el login responde 429 aunque las credenciales sean correctas. Aplica a los tres logins: contraseña, Google y AD.
Por qué
Mantis de CP-10 (Regresión Entrega 3). El límite por IP solo se aplicaba cuando el login fallaba (credencialesInvalidas). Un atacante que superaba el límite probando contraseñas igual entraba apenas acertaba una, así que el bloqueo no frenaba el password-spraying.
Cambios
-
LoginIpRateLimiter: nuevoestaBloqueada(ip), que consulta sin registrar. La purga de fallos vencidos pasó afallosVigentes(), que comparte conregistrarIntento(). -
AuthService:verificarIpNoBloqueada(ip)al inicio delogin,loginConGoogleyloginConAd, antes de validar nada. El 429 se arma enlimiteDeIpExcedido(). - El mensaje del 429 pasa a "Demasiados intentos de inicio de sesión fallidos. Intentá nuevamente más tarde.", como pide el caso.
- Tests: 4 nuevos en
LoginIpRateLimiterTesty 3 nuevos enAuthServiceTest(IP bloqueada con credenciales correctas, Google y AD), más la verificación del mensaje.
Cómo probar
- Desde la misma IP, 20
POST /auth/logincon contraseña inválida → 401. - El 21, con credenciales inválidas → 429.
- Un login con credenciales correctas desde esa IP → 429 (antes daba 200).
- Después de 10 minutos, o reiniciando el backend, el login correcto vuelve a dar 200.
Suite completa: 897 tests, 0 fallas.
Cambios en BD
Ninguno.