Autenticazione a Due Fattori (2FA)
Panoramica
Il sistema 2FA è stato implementato per aumentare la sicurezza degli account utente. Utilizza TOTP (Time-based One-Time Password) compatibile con le app di autenticazione più comuni come Google Authenticator, Authy, Microsoft Authenticator, ecc.
Architettura
Modello Utente
Il modello User è stato esteso con i seguenti campi:
twoFactorEnabled: Boolean (default: false)
twoFactorSecret: String (select: false) // Non incluso nelle query di defaultEndpoint API
1. POST /api/auth/2fa/setup
Genera un nuovo secret TOTP e restituisce il QR code per la configurazione.
Response:
{
"success": true,
"secret": "JBSWY3DPEHPK3PXP",
"qrCode": "data:image/png;base64,..."
}2. POST /api/auth/2fa/verify
Verifica il token TOTP fornito e abilita il 2FA per l’utente.
Request:
{
"token": "123456"
}Response:
{
"success": true,
"message": "2FA abilitato con successo"
}3. POST /api/auth/2fa/disable
Disabilita il 2FA per l’utente corrente.
Response:
{
"success": true,
"message": "2FA disabilitato con successo"
}4. GET /api/auth/2fa/status
Restituisce lo stato corrente del 2FA per l’utente.
Response:
{
"success": true,
"twoFactorEnabled": true
}Flusso di Utilizzo
Abilitazione 2FA
- L’utente clicca su “Abilita 2FA” nella pagina Impostazioni
- Il sistema genera un nuovo secret TOTP e un QR code
- L’utente scansiona il QR code con la sua app di autenticazione
- L’utente inserisce il codice a 6 cifre generato dall’app
- Il sistema verifica il codice (con una finestra di tolleranza di ±2 intervalli)
- Se il codice è valido, il 2FA viene abilitato
Disabilitazione 2FA
- L’utente clicca su “Disabilita 2FA” nella pagina Impostazioni
- Il sistema rimuove il secret e disabilita il 2FA
- L’utente riceve una conferma
Interfaccia Utente
Pagina Impostazioni
- Card “Autenticazione a Due Fattori”: Mostra lo stato corrente (abilitato/disabilitato)
- Indicatore visivo: Pallino verde se abilitato, grigio se disabilitato
- Pulsante “Abilita 2FA”: Apre il dialog di configurazione
- Pulsante “Disabilita 2FA”: Disabilita immediatamente il 2FA
- Dialog di Setup: Mostra il QR code e un campo per inserire il codice di verifica
Sicurezza
- Il
twoFactorSecretnon viene mai esposto nelle query normali (campo conselect: false) - Viene recuperato esplicitamente solo quando necessario per la verifica
- La verifica dei token utilizza una finestra di tolleranza (
window: 2) per gestire piccole differenze di sincronizzazione oraria - Il secret è codificato in base32 (standard TOTP)
Dipendenze
- speakeasy: Libreria per generazione e verifica TOTP
- qrcode: Libreria per generare QR codes come data URL
TODO / Miglioramenti Futuri
- Implementare backup codes per il recupero account
- Aggiungere la verifica 2FA al flusso di login
- Logging degli accessi con 2FA
- Rate limiting per i tentativi di verifica
- Notifica email quando 2FA viene abilitato/disabilitato
- Possibilità di richiedere 2FA obbligatorio per ruoli specifici
Last updated on