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á:

  1. Recibir las credenciales ingresadas por el usuario.
  2. Validar las credenciales contra la información registrada.
  3. Identificar al usuario correspondiente cuando las credenciales sean válidas.
  4. Generar y entregar el mecanismo de autenticación necesario para acceder a los recursos protegidos.
  5. Controlar los intentos fallidos de autenticación y aplicar las medidas de seguridad correspondientes.

Contrato de API

Endpoint asociado:

POST /auth/login

DTO de entrada:

LoginDto

DTO de Salida:

LoginResponseDto

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]