Vai al contenuto principale
Change page

Autenticazione su Ethereum

Se provieni dallo sviluppo web tradizionale, sei abituato all'accesso con nome utente/password, ai flussi OAuth e ai cookie di sessione. L'autenticazione su Ethereum funziona diversamente e, per molti versi, in modo più semplice.

Su Ethereum, un utente dimostra la propria identità tramite la firma di un messaggio con il proprio portafoglio. Nessuna password da memorizzare. Nessun database di credenziali da cui possano trapelare dati. Solo crittografia.

In cosa differisce dal Web2?

Web2Ethereum
Nome utente + passwordIndirizzo del portafoglio + firma
Il server memorizza le credenzialiL'utente detiene la chiave privata
Sessioni gestite da cookie / JWTLe sessioni iniziano con una firma del portafoglio offchain
"Accedi con Google""Accedi con Ethereum"
Flussi di ripristino della passwordRecupero tramite frase seme

Il cambiamento fondamentale: nel Web2, un server centralizzato ti autentica. Su Ethereum, sei tu ad autenticarti dimostrando di controllare un indirizzo specifico, e chiunque può verificarlo in modo indipendente.

Prerequisiti

Assicurati di aver compreso:

Come funziona l'autenticazione basata sul portafoglio

Il flusso principale è semplice:

  1. La tua applicazione decentralizzata (dapp) chiede all'utente di connettere il proprio portafoglio (tramite MetaMask, Rainbow, WalletConnect, ecc.)
  2. Il portafoglio condivide l'indirizzo Ethereum dell'utente: questo è il suo identificatore pubblico
  3. La tua dapp genera un messaggio univoco (un nonce o una sfida)
  4. L'utente firma il messaggio con la propria chiave privata (avviene all'interno del portafoglio)
  5. Il tuo backend verifica la firma rispetto all'indirizzo dichiarato
  6. Se valida, l'utente è autenticato

Nessuna password è mai stata digitata, memorizzata o trasmessa.

Accedi con Ethereum (EIP-4361)

EIP-4361 (si apre in una nuova scheda) definisce un formato di messaggio standard per l'accesso a Ethereum, comunemente chiamato SIWE (Sign-In with Ethereum). Sostituisce la firma di messaggi ad-hoc con uno standard strutturato e sicuro.

Un messaggio SIWE si presenta così:

Caratteristiche principali di SIWE:

  • Vincolo di dominio - il messaggio include il dominio, prevenendo il phishing
  • ID della catena - specifica per quale rete è valida la firma
  • Nonce - previene gli attacchi di replay
  • Scadenza - marca temporale opzionale che limita la finestra di validità
  • Risorse - URI opzionali per l'accesso con ambito limitato

Librerie SIWE

Esempio: accesso lato client con siwe

Esempio: verifica lato server (Node.js)

Librerie di connessione del portafoglio

Prima dell'autenticazione, è necessario che l'utente connetta il proprio portafoglio. Queste librerie semplificano l'operazione:

Verificare le firme manualmente

Se preferisci non usare SIWE, puoi verificare le firme direttamente:

Note importanti sulla sicurezza

  • Usa sempre un nonce - previene gli attacchi di replay in cui viene riutilizzata una vecchia firma
  • Includi il dominio - impedisce che le firme siano valide su siti diversi
  • Controlla la scadenza - le firme dovrebbero avere una finestra di validità limitata
  • Usa SIWE (EIP-4361) quando possibile - gestisce tutto quanto sopra per te
  • Non esporre mai le chiavi private - la firma avviene all'interno del portafoglio; la tua app vede solo il risultato

Gestione delle sessioni

Una volta autenticato, hai ancora bisogno delle sessioni, proprio come nel Web2. Modelli comuni:

  • Token JWT - emetti un JWT dopo aver verificato la firma, da usare per le richieste API
  • Sessioni lato server - memorizza l'indirizzo verificato in un cookie di sessione
  • SIWE con risorse - definisci token di accesso con ambito limitato collegati a URI specifici

La differenza chiave rispetto al Web2: l'indirizzo Ethereum dell'utente è la sua identità persistente. Può usarlo in qualsiasi dapp senza creare un nuovo account.

Identità decentralizzata

L'autenticazione di Ethereum fa parte di un movimento più ampio verso l'identità auto-sovrana. Gli standard e i progetti in questo spazio includono:

Letture di approfondimento