Autenticación - bootcamp-uchile-2026/grupo-2-backend GitHub Wiki
Autenticación
Funcionalidad
Permite al usuario ingresar a la plataforma mediante la validación de sus credenciales.
Objetivo
Validar la identidad del usuario y proporcionar el mecanismo necesario para acceder de forma segura a los recursos protegidos.
Responsabilidad del Backend
El backend deberá:
- Recibir las credenciales ingresadas por el usuario.
- Validar las credenciales contra la información registrada.
- Identificar al usuario correspondiente cuando las credenciales sean válidas.
- Generar y entregar el mecanismo de autenticación necesario para acceder a los recursos protegidos.
- Controlar los intentos fallidos de autenticación y aplicar las medidas de seguridad correspondientes.
Contrato de API
Endpoint asociado:
DTO de entrada:
DTO de Salida:
La definición completa del método HTTP, query parameters y respuestas se encuentra centralizada en Endpoints.
La estructura completa de los datos devueltos se encuentra centralizada en DTOs.
Reglas de negocio
- Las credenciales ingresadas deben estar asociadas a un único usuario registrado.
- El usuario tendrá un máximo de 3 intentos fallidos consecutivos de autenticación antes de aplicar una medida de restricción temporal.
- El contador de intentos fallidos deberá asociarse al usuario y no únicamente a la sesión del navegador.
- El sistema deberá contar con mecanismos adicionales para prevenir intentos masivos de autenticación sobre diferentes cuentas.
- Los intentos fallidos se contabilizarán cuando las credenciales proporcionadas no permitan autenticar correctamente al usuario.
- Las contraseñas no deberán almacenarse en texto plano y deberán utilizar un mecanismo seguro de hash.
- Las credenciales válidas permitirán generar el mecanismo de autenticación necesario para acceder a los recursos protegidos.
Relación con Página de Cuenta de Usuario
flowchart TD
A[Cuenta de Usuario] --> B[Ingresar]
B --> C[POST /auth/login]
C --> D[LoginDto]
D --> E{¿Credenciales válidas?}
E -->|Sí| F[LoginResponseDto]
F --> G[Usuario autenticado]
E -->|No| H[Registrar intento fallido]
H --> I{¿Alcanza 3 intentos?}
I -->|No| B
I -->|Sí| J[Aplicar restricción temporal]
G --> K[Perfil de Usuario]
K --> L[GET /usuario/me]