Przejdź do głównej treści
Change page

Uwierzytelnianie w Ethereum

Jeśli wywodzisz się z tradycyjnego tworzenia stron internetowych, jesteś przyzwyczajony do logowania za pomocą nazwy użytkownika i hasła, przepływów OAuth oraz plików cookie sesji. Uwierzytelnianie w Ethereum działa inaczej — i pod wieloma względami prościej.

W Ethereum użytkownik udowadnia swoją tożsamość poprzez podpisanie wiadomości swoim portfelem. Nie ma hasła do przechowywania. Nie ma bazy danych z danymi uwierzytelniającymi, która mogłaby wyciec. Tylko kryptografia.

Czym różni się to od Web2?

Web2Ethereum
Nazwa użytkownika + hasłoAdres portfela + podpis
Serwer przechowuje dane logowaniaUżytkownik posiada klucz prywatny
Sesje zarządzane przez cookies / JWTSesje rozpoczynają się od pozałańcuchowego podpisu portfela
„Zaloguj się przez Google”„Zaloguj się przez Ethereum”
Procedury resetowania hasłaOdzyskiwanie przez frazę odzyskiwania

Zasadnicza zmiana: w Web2 uwierzytelnia Cię scentralizowany serwer. W Ethereum uwierzytelniasz się sam, udowadniając, że kontrolujesz określony adres — i każdy może to niezależnie zweryfikować.

Wymagania wstępne

Upewnij się, że rozumiesz:

Jak działa uwierzytelnianie oparte na portfelu

Główny przepływ jest prosty:

  1. Twoja zdecentralizowana aplikacja (dapp) prosi użytkownika o podłączenie portfela (przez MetaMask, Rainbow, WalletConnect itp.)
  2. Portfel udostępnia adres Ethereum użytkownika - jest to jego publiczny identyfikator
  3. Twoja dapp generuje unikalną wiadomość (nonce lub wyzwanie)
  4. Użytkownik podpisuje wiadomość swoim kluczem prywatnym (dzieje się to wewnątrz portfela)
  5. Twój backend weryfikuje podpis względem zadeklarowanego adresu
  6. Jeśli jest prawidłowy, użytkownik zostaje uwierzytelniony

Żadne hasło nie zostało wpisane, zapisane ani przesłane.

Logowanie przez Ethereum (EIP-4361)

EIP-4361 (otwiera się w nowej karcie) definiuje standardowy format wiadomości do logowania w Ethereum, powszechnie nazywany SIWE (Sign-In with Ethereum). Zastępuje on doraźne podpisywanie wiadomości ustrukturyzowanym, bezpiecznym standardem.

Wiadomość SIWE wygląda następująco:

Kluczowe cechy SIWE:

  • Powiązanie z domeną - wiadomość zawiera domenę, co zapobiega phishingowi
  • ID łańcucha (Chain ID) - określa, dla której sieci podpis jest ważny
  • Nonce - zapobiega atakom typu replay
  • Wygaśnięcie - opcjonalny znacznik czasu ograniczający okno ważności
  • Zasoby - opcjonalne identyfikatory URI dla dostępu o określonym zakresie

Biblioteki SIWE

Przykład: logowanie po stronie klienta za pomocą siwe

Przykład: weryfikacja po stronie serwera (Node.js)

Biblioteki do łączenia portfeli

Przed uwierzytelnieniem użytkownik musi podłączyć swój portfel. Te biblioteki to ułatwiają:

Ręczna weryfikacja podpisów

Jeśli wolisz nie używać SIWE, możesz weryfikować podpisy bezpośrednio:

Ważne uwagi dotyczące bezpieczeństwa

  • Zawsze używaj nonce - zapobiega atakom typu replay, w których ponownie wykorzystywany jest stary podpis
  • Uwzględnij domenę - zapobiega ważności podpisów na różnych stronach
  • Sprawdzaj wygaśnięcie - podpisy powinny mieć ograniczone okno ważności
  • Używaj SIWE (EIP-4361), gdy to możliwe - obsługuje to wszystko za Ciebie
  • Nigdy nie ujawniaj kluczy prywatnych - podpis następuje wewnątrz portfela; Twoja aplikacja widzi tylko wynik

Zarządzanie sesją

Po uwierzytelnieniu nadal potrzebujesz sesji — tak jak w Web2. Typowe wzorce:

  • Tokeny JWT - wydaj JWT po zweryfikowaniu podpisu, używaj do żądań API
  • Sesje po stronie serwera - przechowuj zweryfikowany adres w pliku cookie sesji
  • SIWE z zasobami - definiuj tokeny dostępu o określonym zakresie powiązane z konkretnymi identyfikatorami URI

Kluczowa różnica w stosunku do Web2: adres Ethereum użytkownika jest jego trwałą tożsamością. Może go używać w dowolnej dapp bez tworzenia nowego konta.

Zdecentralizowana tożsamość

Uwierzytelnianie w Ethereum jest częścią szerszego ruchu w kierunku suwerennej tożsamości (self-sovereign identity). Standardy i projekty w tej przestrzeni obejmują:

Dalsza lektura