Hur man implementerar tvåfaktorsautentisering (2FA) i Node.js med autentiseringsappar
Lär dig hur man implementerar tvåfaktorsautentisering (2FA) i Node.js med autentiseringsappar, TOTP och otplib-biblioteket. Denna steg-för-steg-guide täcker allt från att generera QR-koder till att verifiera autentiseringskoder.
Vad är tvåfaktorsautentisering (2FA)?
I traditionella applikationer använder vi vanligtvis e-post/användarnamn/telefon som våra identitetsidentifierare. Genom att kombinera dessa identitetsidentifierare med motsvarande lösenord eller verifieringskoder kan vi slutföra autentiseringsprocessen.
Men i scenarier med högre säkerhetskrav är det inte tillräckligt att endast förlita sig på identitetsidentifierare för autentisering. Detta beror på att dessa identitetsidentifierare och dess motsvarande verifieringsinformation kan vara sårbara för läckor.
Detta är där tvåfaktorsautentisering (2FA) kommer in - ett ytterligare säkerhetslager som kräver att användare tillhandahåller två olika autentiseringsfaktorer för att verifiera sin identitet, vilket säkerställer att personen som försöker få åtkomst till kontot verkligen är den legitima användaren.
Vanliga 2FA-metoder inkluderar:
- TOTP-autentisering med autentiseringsappar
- Biometrisk autentisering
- Enhetsbaserad autentisering
- SMS-verifieringskoder
I denna handledning kommer vi att fokusera på att implementera TOTP-baserad 2FA med autentiseringsappar med hjälp av biblioteket otplib i din Node.js-applikation.
Vad är TOTP Autentisering?
TOTP står för Tidbaserade engångslösenord. Som Wikipedia säger, är det en datoralgoritm som genererar ett engångslösenord (OTP) som använder den aktuella tiden som en källa till unikhet.
Med en delad TOTP-hemlig nyckel mellan användarens telefon och appservern, kan användarens telefon och appservern generera samma TOTP-kod vid samma tidpunkt:
Eftersom TOTP-generering är beroende av tid kan det beräknas offline. Dessutom producerar TOTP en numerisk sträng, vilket gör det enkelt och användarvänligt. Därför används verifiering av TOTP vanligtvis som ett medel för tvåfaktorsautentisering.
När användare använder TOTP som metod för tvåfaktorsautentisering, stöter de ofta på utmaningen att lagra TOTP-hemligheten och generera TOTP-koder. Det är här autentiseringsappar är användbara. Vi kan använda autentiseringsappar för att lagra TOTP-hemligheten och autentiseringsappar genererar automatiskt TOTP-koder åt dig. När verifiering behövs behöver du bara öppna din autentiseringsapp, och du får TOTP-koden som motsvarar TOTP-hemligheten. Populära autentiseringsappar inkluderar Google Authenticator och Microsoft Authenticator.
Processen att implementera TOTP som tvåfaktorsautentisering involverar två steg:
- Binda en TOTP-hemlighet till användaren.
- Verifiera användarens TOTP-kod med den relaterade TOTP-hemligheten.
Processen att binda TOTP till en användare är som följer:
När användaren väl har bundit TOTP, kan de använda det för verifiering. Processen är som följer:
Som illustrerat i diagrammet använder vi på användarsidan autentiseringsappar för att hantera TOTP-hemligheten och generera TOTP-koder. På serversidan behöver vi stöd för att generera en TOTP-hemlighet och validera TOTP-koden som skickats av användaren. I denna artikel kommer vi att använda otpllib som ett exempel för att integrera TOTP-relaterade funktioner på serversidan.
Implementera TOTP-baserad 2FA med otplib för din Node.js-app
Anta att din app är baserad på Express.js, och användarna loggar in via /sign-in
-ändpunkten, planen för att stödja TOTP i användarens inloggningsprocess är som följer:
- När användaren inte är bunden till TOTP, skicka TOTP-hemligheten till användaren i form av en QR-kod och uppmana dem att binda TOTP.
- När användaren redan har bundit TOTP, be dem verifiera TOTP.
Först, låt oss installera beroendena för projektet: otplib
och qrcode
:
Nästa, låt oss förbättra vår /sign-in
-ändpunkt.
Enligt vår implementering, när en användare inte är bunden till TOTP, kommer vi att skicka en QR-kod till frontend:
Användaren skannar QR-koden med autentiseringsappen, och autentiseringsappen genererar en TOTP-kod och lagrar den relaterade TOTP-hemligheten.
Användaren skickar den erhållna TOTP-koden tillbaka till appservern. Om koden är framgångsrikt verifierad, kan vi då binda denna TOTP till användaren.
Så, låt oss implementera en /verify-totp
API för att ta emot TOTP-koden skickad av användaren:
På detta sätt har vi framgångsrikt bundit TOTP för användaren. Därefter, när användaren loggar in, behöver de bara öppna autentiseringsappen, skicka verifieringskoden som motsvarar den tidigare bundna TOTP-hemligheten, och autentiseringsprocessen kommer att slutföras.
I /verify-totp
API, använder vi TOTP-hemligheten tidigare bunden till användaren för att verifiera TOTP-koden.
Sammanfattning
Baserat på denna artikel borde du nu kunna integrera verifiering med autentiseringsapp för dina appar.
Dock är detta bara ett enkelt exempel. När din app är stor eller förväntas bli komplex kan integrering av en ny autentiseringsmetod innebära betydande kostnader.
Det fantastiska nyheten är: Logto, som en omfattande leverantör av identitetsautentiseringslösningar, erbjuder stöd för flerfaktorsautentisering (MFA), inklusive verifiering med autentiseringsapp. Genom att använda Logto kan du sömlöst integrera en säker och effektiv användarinloggningsprocess med MFA i din applikation på bara några minuter!