Skip to content

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: nuevo estaBloqueada(ip), que consulta sin registrar. La purga de fallos vencidos pasó a fallosVigentes(), que comparte con registrarIntento().
  • AuthService: verificarIpNoBloqueada(ip) al inicio de login, loginConGoogle y loginConAd, antes de validar nada. El 429 se arma en limiteDeIpExcedido().
  • 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 LoginIpRateLimiterTest y 3 nuevos en AuthServiceTest (IP bloqueada con credenciales correctas, Google y AD), más la verificación del mensaje.

Cómo probar

  1. Desde la misma IP, 20 POST /auth/login con contraseña inválida → 401.
  2. El 21, con credenciales inválidas → 429.
  3. Un login con credenciales correctas desde esa IP → 429 (antes daba 200).
  4. 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.

Merge request reports

Loading