Manuale Utente - DID Login
Versione 1.0 — Aprile 2026
1. Introduzione
DID Login è un sistema di autenticazione basato su identità decentralizzata (DID) che permette di accedere utilizzando il tuo wallet Ethereum (MetaMask), senza bisogno di password, email o provider di identità centralizzati.
https://wallet.smartcomm.telemaco.it
Cosa puoi fare
- Autenticarti con un click usando MetaMask (zero gas, zero transazioni on-chain)
- Ottenere un identificatore decentralizzato (DID) legato al tuo wallet
- Gestire il tuo profilo utente
- Richiedere e verificare Verifiable Credentials (credenziali verificabili W3C)
2. Concetti Chiave
2.1 Decentralized Identifier (DID)
Un DID è un identificatore unico e permanentemente assegnato al tuo wallet Ethereum.
Il formato utilizzato è did:ethr:0x... secondo lo standard W3C.
Nessun ente centrale lo controlla: è tuo e lo rimane finché possiedi le chiavi del wallet.
2.2 Sign-In with Ethereum (SIWE)
Il protocollo di autenticazione segue lo standard EIP-4361: Sign-In with Ethereum. Il server genera un messaggio (nonce), tu lo firmi con MetaMask (operazione gratuita, off-chain), e il server verifica la firma crittografica per confermare la tua identità.
2.3 Verifiable Credentials (VC)
Le Verifiable Credentials sono attestati digitali firmati crittograficamente secondo lo standard W3C. Possono rappresentare verifiche email, livelli KYC, membership, o qualsiasi altra attestazione. Chiunque può verificarne l'autenticità senza contattare l'emittente.
2.4 JWT (JSON Web Token)
Dopo il login, il server emette un JWT che viene salvato nella sessione del browser. Questo token viene usato per autenticare tutte le richieste API successive.
3. Prerequisiti
3.1 MetaMask
Devi avere l'estensione MetaMask installata nel tuo browser:
- Chrome / Edge / Brave: installa da metamask.io
- Firefox: installa dal componente aggiuntivo MetaMask
- Mobile: app MetaMask disponibile per iOS e Android
3.2 Wallet configurato
Assicurati di avere:
- Un wallet MetaMask con almeno un account attivo
- Accesso al browser dove è installato MetaMask
4. Connessione e Login
4.1 Prima connessione
- Accedi a
https://wallet.smartcomm.telemaco.it - Clicca il pulsante "Connect MetaMask"
- MetaMask chiederà di selezionare un account e autorizzare la connessione
- Approva la richiesta di connessione
4.2 Firma del messaggio (SIWE)
Dopo la connessione, il sistema avvia automaticamente il login:
- Connecting — Il server genera un nonce unico e un messaggio SIWE
- Signing — MetaMask ti chiede di firmare il messaggio (operazione gratuita)
- Verifying — Il server verifica la firma e emette un JWT
4.3 Sessione attiva
Dopo il login, la sessione rimane attiva finché il browser è aperto (il JWT è salvato in sessionStorage). Chiudendo il browser o cliccando "Logout", la sessione viene terminata.
4.4 Cambio account o rete
- Se cambi account in MetaMask, il sistema rileva il cambio e richiede automaticamente una nuova firma
- Se cambi rete blockchain, la pagina si ricarica per aggiornare il contesto
4.5 Logout
Clicca il pulsante "Logout" in alto a destra nella dashboard. Il token JWT viene eliminato e verrai riportato alla pagina di login.
5. Profilo Utente
La sezione Profile mostra e permette di modificare le tue informazioni.
5.1 Campi del profilo
| Campo | Descrizione | Modificabile |
|---|---|---|
| Display Name | Il tuo nome visualizzato | Sì |
| Indirizzo email | Sì | |
| Bio | Breve descrizione personale | Sì |
| DID | Il tuo identificatore decentralizzato | No (automatico) |
| Address | Indirizzo Ethereum del wallet | No (automatico) |
| Member since | Data di prima registrazione | No (automatico) |
5.2 Modificare il profilo
- Clicca "Edit Profile"
- Compila i campi desiderati
- Clicca "Save" per salvare o "Cancel" per annullare
6. DID - Identità Decentralizzata
La sezione DID mostra il tuo identificatore decentralizzato e il relativo DID Document.
6.1 Il tuo DID
Il DID viene generato automaticamente dal tuo indirizzo Ethereum con il formato:
did:ethr:0x1234567890abcdef1234567890abcdef12345678
6.2 DID Document
Il DID Document è un documento JSON che descrive il metodo di verifica associato al tuo DID. Contiene:
id— Il DID stessoverificationMethod— Metodo crittografico (secp256k1 recovery)authentication— Riferimento al metodo di autenticazioneassertionMethod— Riferimento al metodo per firmare attestati
Clicca "Show DID Document" per visualizzare il JSON completo.
7. Verifiable Credentials
La sezione Credentials permette di gestire le tue credenziali verificabili (VC).
7.1 Tipi di credenziali disponibili
| Tipo | Descrizione | Esempio di claims |
|---|---|---|
EmailVerification |
Verifica del possesso di un indirizzo email | {"email": "user@example.com"} |
KYCLevel1 |
Attestazione di aver completato il KYC di livello 1 | {"level": "basic", "country": "IT"} |
Membership |
Attestazione di appartenenza a un'organizzazione | {"organization": "SmartComm", "role": "member"} |
7.2 Richiedere una credenziale
- Nella sezione "Request New Credential", seleziona il tipo di credenziale
- Inserisci i claims in formato JSON (es.
{"email": "user@example.com"}) - Clicca "Issue Credential"
- La credenziale viene emessa firmata dal DID dell'issuer e salvata nel sistema
7.3 Verificare una credenziale
Clicca "Verify" su una credenziale per verificarne l'autenticità. Il sistema controlla la firma crittografica del JWT e mostra:
- Valid — La credenziale è autentica e firmata correttamente
- Issuer — Il DID dell'emittente
- Type — I tipi della credenziale
- Subject — Il DID del soggetto (tu)
7.4 Visualizzare il JWT
Clicca "Show JWT" per visualizzare il token JWT della Verifiable Credential. Questo token può essere condiviso con terze parti per dimostrare il possesso della credenziale.
8. Sicurezza
8.1 Autenticazione
- L'autenticazione usa firme crittografiche ECDSA (secp256k1)
- Il nonce è unico e scade dopo 5 minuti
- Il JWT ha una scadenza configurata (default: 24 ore)
- Il JWT è salvato in
sessionStorage(non persiste alla chiusura del browser)
8.2 Firme off-chain
- Nessuna transazione on-chain viene effettuata
- Nessun gas viene speso
- Le firme vengono verificate localmente dal server
8.3 Privacy
- I dati del profilo sono salvati localmente sul server (file JSON)
- Le credenziali sono firmate e verificabili crittograficamente
- L'identità è legata esclusivamente al tuo wallet Ethereum
8.4 Best practices
- Non condividere il tuo JWT con terze parti
- Esegui sempre il logout quando hai finito
- Proteggi la tua seed phrase di MetaMask
- Verifica sempre il dominio prima di firmare un messaggio
9. Riferimento API
Tutti gli endpoint sono prefissati con /api.
9.1 Autenticazione
| Metodo | Endpoint | Descrizione |
|---|---|---|
POST | /api/auth/nonce | Richiedi un nonce per la firma SIWE |
POST | /api/auth/verify | Verifica firma e ottieni JWT |
POST | /api/auth/logout | Termina la sessione |
9.2 Profilo (richiede JWT)
| Metodo | Endpoint | Descrizione |
|---|---|---|
GET | /api/profile | Ottieni il profilo dell'utente |
PUT | /api/profile | Aggiorna il profilo |
9.3 DID
| Metodo | Endpoint | Descrizione |
|---|---|---|
GET | /api/did/:address | Risolvi il DID document per un indirizzo |
9.4 Credenziali
| Metodo | Endpoint | Descrizione |
|---|---|---|
POST | /api/credentials/issue | Emetti una nuova credenziale |
GET | /api/credentials | Lista le tue credenziali |
POST | /api/credentials/verify | Verifica una credenziale VC-JWT |
9.5 Esempio: flusso di login completo
// 1. Richiedi nonce
POST /api/auth/nonce
{ "address": "0x..." }
→ { "message": "wallet.smartcomm.telemaco.it wants you to sign in..." }
// 2. Firma il messaggio con MetaMask (personal_sign)
// 3. Verifica la firma
POST /api/auth/verify
{ "message": "...", "signature": "0x..." }
→ { "success": true, "token": "eyJ...", "did": "did:ethr:0x..." }
// 4. Usa il token per le richieste autenticate
GET /api/profile
Authorization: Bearer eyJ...
10. Domande Frequenti (FAQ)
Devo pagare gas per usare DID Login?
No. L'autenticazione è completamente off-chain. Non viene effettuata nessuna transazione sulla blockchain.
Posso usare un wallet diverso da MetaMask?
Attualmente il sistema supporta MetaMask. In futuro verranno aggiunti altri wallet compatibili con EIP-1193.
Cosa succede se cambio computer o browser?
Il tuo DID rimane lo stesso (legato all'indirizzo del wallet). Ti basterà installare MetaMask, importare il wallet e rifare il login.
I miei dati vengono salvati sulla blockchain?
No. Profili e credenziali sono salvati sul server. Solo le firme crittografiche garantiscono l'autenticità.
Quanto dura la sessione?
Il JWT scade dopo 24 ore. La sessione nel browser termina alla chiusura della finestra (sessionStorage).
Le Verifiable Credentials sono pubblicamente verificabili?
Sì. Chiunque possieda il JWT di una VC può verificarne la firma usando l'endpoint /api/credentials/verify.
Posso revocare una credenziale?
La revoca automatica non è ancora disponibile. Le credenziali scadono alla data indicata in exp.
11. Glossario
| Termine | Definizione |
|---|---|
| DID | Decentralized Identifier — identificatore unico decentralizzato secondo lo standard W3C |
| SIWE | Sign-In with Ethereum — protocollo di autenticazione (EIP-4361) |
| VC | Verifiable Credential — credenziale verificabile W3C |
| JWT | JSON Web Token — standard per la trasmissione sicura di informazioni |
| Nonce | Numero usato una sola volta per prevenire attacchi replay |
| MetaMask | Wallet Ethereum a formato browser extension / app mobile |
| Gas | Costo di una transazione sulla blockchain Ethereum (non applicato qui) |
| Ethereum | Blockchain pubblica su cui si basa il sistema DID |
| Off-chain | Operazione che non richiede una transazione sulla blockchain |
| ECDSA | Elliptic Curve Digital Signature Algorithm — algoritmo di firma usato da Ethereum |
| Issuer | Entità che emette (firma) una Verifiable Credential |
| Subject | Soggetto a cui si riferisce una Verifiable Credential |