Come implementare l'autenticazione a due fattori (2FA) in Node.js con le app di autenticazione
Scopri come implementare l'autenticazione a due fattori (2FA) in Node.js utilizzando app di autenticazione, TOTP e la libreria otplib. Questa guida passo dopo passo copre tutto, dalla generazione di codici QR alla verifica dei codici di autenticazione.
Cos'è l'autenticazione a due fattori (2FA)
Nelle applicazioni tradizionali, solitamente utilizziamo Email/Nome utente/Telefono come nostri identificativi di identità. Combinando questi identificativi di identità con password corrispondenti o codici di verifica, possiamo completare il processo di autenticazione.
Tuttavia, in scenari con requisiti di sicurezza elevati, affidarsi esclusivamente agli identificativi di identità per l'autenticazione non è sufficiente. Questo perché questi identificativi di identità e le loro informazioni di verifica corrispondenti possono essere vulnerabili a fughe di dati.
Qui entra in gioco l'autenticazione a due fattori (2FA) - uno strato di sicurezza aggiuntivo che richiede agli utenti di fornire due fattori di autenticazione diversi per verificare la loro identità, assicurando che la persona che tenta di accedere all'account sia veramente l'utente legittimo.
I metodi comuni di 2FA includono:
- Autenticazione TOTP utilizzando app di autenticazione
- Autenticazione biometrica
- Autenticazione basata su dispositivo
- Codici di verifica via SMS
In questo tutorial, ci concentreremo sull'implementazione del 2FA basato su TOTP utilizzando app di autenticazione tramite la libreria otplib nella tua applicazione Node.js.
Cos'è l'autenticazione TOTP?
TOTP sta per Time-based one-time passwords. Come dice Wikipedia, è un algoritmo informatico che genera una password monouso (OTP) che utilizza il tempo attuale come fonte di unicità.
Con una chiave segreta TOTP condivisa tra il telefono dell'utente e il server dell'app, il telefono dell'utente e il server dell'app possono generare lo stesso codice TOTP nello stesso momento:
Poiché la generazione di TOTP si basa sul tempo, può essere calcolata offline. Inoltre, TOTP produce una stringa numerica, rendendola semplice e user-friendly. Pertanto, la verifica di TOTP è comunemente usata come mezzo di autenticazione a 2 fattori.
Quando gli utenti utilizzano TOTP come metodo di autenticazione a 2 fattori, spesso incontrano la sfida di memorizzare il segreto TOTP e generare codici TOTP. Qui entrano in gioco le app di autenticazione. Possiamo utilizzare le app di autenticazione per memorizzare il segreto TOTP e le app di autenticazione genereranno automaticamente codici TOTP per te. Quando è necessaria la verifica, devi semplicemente aprire la tua app di autenticazione, e otterrai il codice TOTP corrispondente al segreto TOTP. Le app di autenticazione popolari includono Google Authenticator e Microsoft Authenticator.
Il processo di implementazione di TOTP come autenticazione a due fattori coinvolge due passaggi:
- Associare un segreto TOTP all'utente.
- Verificare il codice TOTP dell'utente tramite il segreto TOTP correlato.
Il processo di associazione del TOTP a un utente è il seguente:
Una volta che l'utente ha associato il TOTP, può utilizzarlo per la verifica. Il processo è il seguente:
Come illustrato nel diagramma, dal lato utente, utilizziamo app di autenticazione per gestire il segreto TOTP e generare codici TOTP. Dal lato server, dobbiamo supportare la generazione di un segreto TOTP e la convalida del codice TOTP inviato dall'utente. In questo articolo, utilizzeremo otpllib come esempio per integrare funzionalità correlate al TOTP dal lato server.
Implementa 2FA basato su TOTP utilizzando otplib per la tua app Node.js
Supponendo che la tua app sia basata su Express.js e che gli utenti effettuino il login tramite l'endpoint /sign-in
, il piano per supportare TOTP nel processo di login utente è il seguente:
- Quando l'utente non è associato a TOTP, inviare il segreto TOTP all'utente sotto forma di codice QR e invitarlo ad associare il TOTP.
- Quando l'utente ha già associato il TOTP, invitarlo a verificare il TOTP.
Per prima cosa, installiamo le dipendenze per il progetto: otplib
e qrcode
:
Successivamente, miglioriamo il nostro endpoint /sign-in
.
Secondo la nostra implementazione, quando un utente non è associato a TOTP, invieremo un codice QR al frontend:
L'utente scansiona il codice QR con l'app di autenticazione, e l'app di autenticazione genererà un codice TOTP e memorizzerà il segreto TOTP correlato.
L'utente invia il codice TOTP ottenuto al server dell'app. Se il codice viene verificato con successo, possiamo quindi associare questo TOTP all'utente.
Quindi, implementiamo un'API /verify-totp
per ricevere il codice TOTP inviato dall'utente:
In questo modo, abbiamo associato con successo il TOTP all'utente. Successivamente, quando l'utente effettua il login, deve solo aprire l'app di autenticazione, inviare il codice di verifica corrispondente al segreto TOTP precedentemente associato, e il processo di autenticazione sarà completato.
Nell'API /verify-totp
, utilizziamo il segreto TOTP precedentemente associato all'utente per verificare il codice TOTP.
Sommario
In base a questo articolo, dovresti ora essere in grado di integrare la verifica delle app di autenticazione nella tua applicazione.
Tuttavia, questo è solo un semplice esempio. Quando la tua applicazione è grande o prevedi che diventi complessa, integrare un nuovo metodo di autenticazione potrebbe comportare costi significativi.
La buona notizia è: Logto, che funge da fornitore di soluzioni complete di autenticazione delle identità, offre il supporto per l'autenticazione multifattore (MFA), inclusa la verifica delle app di autenticazione. Sfruttando Logto, puoi integrare senza problemi un processo di login sicuro ed efficiente con MFA nella tua applicazione in pochi minuti!