• mfa
  • 2fa
  • totp
  • nodejs
  • bezpieczeństwo
  • uwierzytelnianie
  • aplikacja uwierzytelniająca
  • otplib

Jak zaimplementować uwierzytelnianie dwuskładnikowe (2FA) w Node.js z aplikacjami uwierzytelniającymi

Dowiedz się, jak zaimplementować uwierzytelnianie dwuskładnikowe (2FA) w Node.js przy użyciu aplikacji uwierzytelniających, TOTP i biblioteki otplib. Ten przewodnik krok po kroku obejmuje wszystko, od generowania kodów QR po weryfikację kodów uwierzytelniających.

Yijun
Yijun
Developer

Czym jest uwierzytelnianie dwuskładnikowe (2FA)

W tradycyjnych aplikacjach zazwyczaj używamy Email/Nazwa użytkownika/Telefon jako naszych identyfikatorów tożsamości. Łącząc te identyfikatory tożsamości z odpowiadającymi im hasłami lub kodami weryfikacyjnymi, możemy zakończyć proces uwierzytelniania.

Jednak w scenariuszach wymagających wyższego poziomu bezpieczeństwa, poleganie wyłącznie na identyfikatorach tożsamości do uwierzytelniania nie jest wystarczające. Dzieje się tak, ponieważ te identyfikatory tożsamości i ich odpowiadające im informacje weryfikacyjne mogą być narażone na wycieki.

Tutaj pojawia się uwierzytelnianie dwuskładnikowe (2FA) - dodatkowa warstwa bezpieczeństwa, która wymaga od użytkowników podania dwóch różnych czynników uwierzytelniających w celu weryfikacji tożsamości, zapewniając, że osoba próbująca uzyskać dostęp do konta jest rzeczywiście prawowitym użytkownikiem.

Powszechne metody 2FA obejmują:

  • Uwierzytelnianie TOTP przy użyciu aplikacji uwierzytelniających
  • Uwierzytelnianie biometryczne
  • Uwierzytelnianie oparte na urządzeniach
  • Kody weryfikacyjne SMS

W tym samouczku skupimy się na implementacji 2FA opartej na TOTP przy użyciu aplikacji uwierzytelniających z biblioteką otplib w Twojej aplikacji Node.js.

Czym jest uwierzytelnianie TOTP?

TOTP to skrót od Haseł jednorazowych opartych na czasie. Jak mówi Wikipedia, jest to algorytm komputerowy generujący hasło jednorazowe (OTP), które wykorzystuje bieżący czas jako źródło unikalności.

Dzięki wspólnemu kluczowi tajnemu TOTP między telefonem użytkownika a serwerem aplikacji, telefon użytkownika i serwer aplikacji mogą generować ten sam kod TOTP w tym samym czasie:

Ponieważ generowanie TOTP opiera się na czasie, może być obliczane offline. Dodatkowo TOTP generuje ciąg numeryczny, co czyni go prostym i przyjaznym dla użytkownika. Dlatego weryfikacja TOTP jest powszechnie stosowana jako metoda uwierzytelniania dwuskładnikowego.

Kiedy użytkownicy używają TOTP jako metody uwierzytelniania dwuskładnikowego, często napotykają problem związany z przechowywaniem tajnego klucza TOTP i generowaniem kodów TOTP. W tym przypadku przydają się aplikacje uwierzytelniające. Możemy używać aplikacji uwierzytelniających do przechowywania tajnego klucza TOTP, a aplikacje uwierzytelniające automatycznie wygenerują dla Ciebie kody TOTP. Kiedy potrzeba weryfikacji, wystarczy otworzyć aplikację uwierzytelniającą, a otrzymasz kod TOTP odpowiadający tajnemu kluczowi TOTP. Popularne aplikacje uwierzytelniające to Google Authenticator i Microsoft Authenticator.

Proces implementacji TOTP jako uwierzytelniania dwuskładnikowego obejmuje dwa kroki:

  1. Powiązanie tajnego klucza TOTP z użytkownikiem.
  2. Weryfikacja kodu TOTP użytkownika za pomocą związanego tajnego klucza TOTP.

Proces wiązania TOTP z użytkownikiem wygląda następująco:

Kiedy użytkownik związał TOTP, może go użyć do weryfikacji. Proces wygląda następująco:

Jak pokazano na diagramie, po stronie użytkownika używamy aplikacji uwierzytelniających do zarządzania tajnym kluczem TOTP i generowania kodów TOTP. Po stronie serwera musimy obsługiwać generowanie tajnego klucza TOTP i weryfikację kodu TOTP przesyłanego przez użytkownika. W tym artykule użyjemy otpllib jako przykładu do integracji funkcji związanych z TOTP po stronie serwera.

Zaimplementuj 2FA oparte na TOTP przy użyciu otplib dla swojej aplikacji Node.js

Zakładając, że Twoja aplikacja jest oparta na Express.js, a użytkownicy logują się za pośrednictwem punktu końcowego /sign-in, plan wsparcia dla TOTP w procesie logowania użytkownika wygląda następująco:

  1. Gdy użytkownik nie jest związany z TOTP, wyślij tajny klucz TOTP do użytkownika w formie kodu QR i poproś o związanie TOTP.
  2. Gdy użytkownik jest już związany z TOTP, poproś go o weryfikację TOTP.

Najpierw zainstalujmy zależności dla projektu: otplib i qrcode:

Następnie rozszerzmy nasz punkt końcowy /sign-in.

Zgodnie z naszą implementacją, gdy użytkownik nie jest związany z TOTP, wyślemy kod QR do frontend:

Zwiąż TOTP

Użytkownik skanuje kod QR przy użyciu aplikacji uwierzytelniającej, a aplikacja uwierzytelniająca wygeneruje kod TOTP i przechowa związany tajny klucz TOTP.

Google Authenticator

Użytkownik przesyła uzyskany kod TOTP z powrotem do serwera aplikacji. Jeśli kod zostanie pomyślnie zweryfikowany, możemy wtedy związać ten TOTP z użytkownikiem.

Więc zaimplementujmy API /verify-totp do odbierania kodu TOTP przesyłanego przez użytkownika:

W ten sposób pomyślnie związaliśmy TOTP dla użytkownika. Następnie, gdy użytkownik zaloguje się, wystarczy otworzyć aplikację uwierzytelniającą, wysłać kod weryfikacyjny odpowiadający wcześniej związanemu tajnemu kluczowi TOTP, a proces uwierzytelniania zostanie zakończony.

Zweryfikuj TOTP

W API /verify-totp używamy wcześniej związanego z użytkownikiem tajnego klucza TOTP do weryfikacji kodu TOTP.

Podsumowanie

Na podstawie tego artykułu powinieneś być w stanie zintegrować weryfikację za pomocą aplikacji uwierzytelniającej ze swoimi aplikacjami.

Jednak to tylko prosty przykład. Kiedy Twoja aplikacja jest duża lub ma stać się złożona, integracja nowej metody uwierzytelniania może oznaczać znaczące koszty.

Dobrą wiadomością jest to: Logto, jako kompleksowy dostawca rozwiązań do uwierzytelniania tożsamości, oferuje wsparcie dla uwierzytelniania wieloskładnikowego (MFA), w tym weryfikację za pomocą aplikacji uwierzytelniającej. Dzięki Logto możesz płynnie zintegrować bezpieczny i wydajny proces logowania użytkownika z MFA do swojej aplikacji w zaledwie kilka minut!