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
- Paciente ->
- 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
| Recurso | Método | Descripción |
|---|---|---|
/api/v1/auth/login | POST | Valida credenciales y devuelve el token + perfil de usuario. |
/api/v1/auth/logout | POST | Invalida el token actual (requiere cabecera Authorization). |
/api/v1/auth/refresh | POST | Renueva el token de acceso usando un Refresh Token. |
/api/v1/auth/forgot-password | POST | Dispara el envío de correo de recuperación. |
/api/v1/auth/reset-password | POST | Recibe 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
}
}
}