Saltar al contenido principal

Autenticación y Seguridad

Versión: 1.0
Estado: 🎨 Prototipado (Miro)
Responsables: Equipo de Frontend / UX
Alcance: Inicio de sesión, Recuperación de cuenta y Gestión de Sesión.

Este módulo regula el acceso de usuarios existentes al sistema, garantizando la persistencia de la sesión y la integridad de los datos según el rol.


1. Flujo de Acceso (Miro)

A continuación, se presenta el diagrama de flujo diseñado para el proceso de Login, Recuperación de cuenta.

Instrucciones: Puedes navegar y hacer zoom directamente en el diagrama superior para ver los estados de error y validaciones.


2. Métodos de Autenticación

2.1 Fase 1 (MVP)

  • Credenciales: Correo electrónico y contraseña.
  • Seguridad: Uso de JSON Web Tokens (JWT) para sesiones sin estado.
  • Persistencia: Opción "Recordarme" para extender la vida del token en el cliente.

2.2 Fase 2 (Roadmap)

  • Login Social: Google y Facebook (prioridad alta post-lanzamiento).

3. Recuperación de Cuenta

  • Flujo: El usuario solicita "Olvidé mi contraseña" -> Recibe un enlace con un token de corta duración (15-30 min) -> Define nueva contraseña.
  • Regla de Seguridad: Al cambiar la contraseña, se deben invalidar todas las sesiones activas en otros dispositivos.

4. Detalles Críticos (No olvidar)

  • Bloqueo por Intentos: Tras 5 intentos fallidos, bloquear la cuenta temporalmente (5 min) o disparar un captcha para prevenir ataques de fuerza bruta.
  • Redirección por Rol:
    • Paciente -> /home
    • Doctor -> /doc/dashboard
    • Entidad -> /entity/dashboard
  • Manejo de Errores: Diferenciar entre "Usuario no encontrado" y "Contraseña incorrecta" de forma genérica para seguridad ("Credenciales inválidas").

5. Especificaciones Técnicas (Pre-vía Swagger)

Estos endpoints representan el contrato inicial entre Front y Back. Todos los endpoints de sesión devuelven un JWT (JSON Web Token).

Endpoints de Sesión

RecursoMétodoDescripción
/api/v1/auth/loginPOSTValida credenciales y devuelve el token + perfil de usuario.
/api/v1/auth/logoutPOSTInvalida el token actual (requiere cabecera Authorization).
/api/v1/auth/refreshPOSTRenueva el token de acceso usando un Refresh Token.
/api/v1/auth/forgot-passwordPOSTDispara el envío de correo de recuperación.
/api/v1/auth/reset-passwordPOSTRecibe el token de correo y la nueva contraseña.

Ejemplo de Respuesta Exitosa (Login)

{
"status": "success",
"data": {
"token": "eyJhbGciOiJIUzI1...",
"user": {
"id": "uuid-123",
"email": "doctor@ejemplo.com",
"role": "DOCTOR",
"status": "ACTIVE",
"onboarding_completed": true
}
}
}