semillero-INVIMA/diagramas/secuencia-autenticacion.md

57 lines
2.1 KiB
Markdown

# Secuencia de autenticacion
```mermaid
sequenceDiagram
actor Usuario
participant Login as LoginPageComponent
participant AuthFE as AuthService Angular
participant Interceptor as authInterceptor
participant AuthRoute as POST /api/auth/login
participant AuthBE as auth.service.js
participant DB as PostgreSQL
participant Router as Angular Router
Usuario->>Login: Ingresa usuario y contrasena
Login->>AuthFE: login(identifier, password)
AuthFE->>AuthRoute: POST /api/auth/login
AuthRoute->>AuthBE: login(pool, credenciales, metadata)
AuthBE->>DB: SELECT usuario por lower(username)
DB-->>AuthBE: app_users
AuthBE->>AuthBE: verifyPassword con crypto.scryptSync
AuthBE->>AuthBE: genera token aleatorio base64url
AuthBE->>AuthBE: hashToken SHA-256 con AUTH_TOKEN_SECRET
AuthBE->>DB: INSERT app_sessions(token_hash, user_id, expires_at, user_agent, ip_address)
DB-->>AuthBE: OK
AuthBE-->>AuthRoute: user, accessToken, expiresAt
AuthRoute-->>AuthFE: { ok: true, data }
AuthFE->>AuthFE: setSession signals y localStorage
AuthFE-->>Login: AuthSession
Login->>Router: navigateByUrl(redirect o /dashboard)
Usuario->>Router: Abre ruta protegida
Router->>AuthFE: authGuard revisa isAuthenticated()
AuthFE-->>Router: true si hay token y usuario
Usuario->>AuthFE: Peticion protegida posterior
AuthFE->>Interceptor: HttpClient request
Interceptor->>AuthFE: getAccessToken()
Interceptor->>AuthRoute: Authorization Bearer accessToken
AuthRoute->>AuthBE: requireAuth -> authenticateToken()
AuthBE->>DB: SELECT app_sessions JOIN app_users por token_hash vigente
DB-->>AuthBE: usuario activo
AuthBE->>DB: UPDATE app_sessions SET last_used_at = NOW()
AuthBE-->>AuthRoute: req.user
```
## Archivos analizados
- `semillero/src/app/features/auth/login-page.component.ts`
- `semillero/src/app/core/services/auth.service.ts`
- `semillero/src/app/core/guards/auth.guard.ts`
- `semillero/src/app/core/interceptors/auth.interceptor.ts`
- `backend/src/routes/auth.routes.js`
- `backend/src/middlewares/auth.middleware.js`
- `backend/src/auth/auth.service.js`
- `backend/src/config/env.js`
- `backend/src/db/pool.js`