Passer au contenu principal
Change page

Authentification sur Ethereum

Si vous venez du développement web traditionnel, vous êtes habitué à la connexion par nom d'utilisateur/mot de passe, aux flux OAuth et aux cookies de session. L'authentification sur Ethereum fonctionne différemment, et à bien des égards, plus simplement.

Sur Ethereum, un utilisateur prouve son identité en signant un message avec son portefeuille. Aucun mot de passe à stocker. Aucune base de données d'identifiants susceptible de fuiter. Juste de la cryptographie.

En quoi est-ce différent du Web2 ?

Web2Ethereum
Nom d'utilisateur + mot de passeAdresse de portefeuille + signature
Le serveur stocke les identifiantsL'utilisateur détient la clé privée
Sessions gérées par cookies / JWTLes sessions commencent par une signature de portefeuille hors chaîne
« Se connecter avec Google »« Se connecter avec Ethereum »
Flux de réinitialisation de mot de passeRécupération par phrase secrète

Le changement fondamental : dans le Web2, un serveur centralisé vous authentifie. Sur Ethereum, vous vous authentifiez vous-même en prouvant que vous contrôlez une adresse spécifique, et n'importe qui peut le vérifier de manière indépendante.

Prérequis

Assurez-vous de bien comprendre :

Comment fonctionne l'authentification basée sur le portefeuille

Le flux principal est simple :

  1. Votre application décentralisée (dapp) demande à l'utilisateur de connecter son portefeuille (via MetaMask, Rainbow, WalletConnect, etc.)
  2. Le portefeuille partage l'adresse Ethereum de l'utilisateur - c'est son identifiant public
  3. Votre dapp génère un message unique (un nonce ou un défi)
  4. L'utilisateur signe le message avec sa clé privée (cela se passe à l'intérieur du portefeuille)
  5. Votre backend vérifie la signature par rapport à l'adresse revendiquée
  6. Si elle est valide, l'utilisateur est authentifié

Aucun mot de passe n'a jamais été tapé, stocké ou transmis.

Se connecter avec Ethereum (EIP-4361)

L'EIP-4361 (s'ouvre dans un nouvel onglet) définit un format de message standard pour la connexion à Ethereum, communément appelé SIWE (Sign-In with Ethereum). Il remplace la signature de message ad hoc par un standard structuré et sécurisé.

Un message SIWE ressemble à ceci :

Caractéristiques principales de SIWE :

  • Liaison de domaine - le message inclut le domaine, ce qui empêche l'hameçonnage (phishing)
  • ID de chaîne - spécifie pour quel réseau la signature est valide
  • Nonce - empêche les attaques par rejeu
  • Expiration - horodatage optionnel limitant la fenêtre de validité
  • Ressources - URI optionnelles pour un accès restreint

Bibliothèques SIWE

Exemple : connexion côté client avec siwe

Exemple : vérification côté serveur (Node.js)

Bibliothèques de connexion de portefeuille

Avant de s'authentifier, l'utilisateur doit connecter son portefeuille. Ces bibliothèques facilitent la tâche :

Vérification manuelle des signatures

Si vous préférez ne pas utiliser SIWE, vous pouvez vérifier les signatures directement :

Notes de sécurité importantes

  • Utilisez toujours un nonce - empêche les attaques par rejeu où une ancienne signature est réutilisée
  • Incluez le domaine - empêche les signatures d'être valides sur différents sites
  • Vérifiez l'expiration - les signatures doivent avoir une fenêtre de validité limitée
  • Utilisez SIWE (EIP-4361) lorsque c'est possible - il gère tout ce qui précède pour vous
  • N'exposez jamais les clés privées - la signature se produit à l'intérieur du portefeuille ; votre application ne voit que le résultat

Gestion des sessions

Une fois authentifié, vous avez toujours besoin de sessions, tout comme dans le Web2. Modèles courants :

  • Jetons JWT - émettez un JWT après avoir vérifié la signature, à utiliser pour les requêtes API
  • Sessions côté serveur - stockez l'adresse vérifiée dans un cookie de session
  • SIWE avec ressources - définissez des jetons d'accès restreints liés à des URI spécifiques

La principale différence avec le Web2 : l'adresse Ethereum de l'utilisateur est son identité persistante. Il peut l'utiliser sur n'importe quelle dapp sans créer de nouveau compte.

Identité décentralisée

L'authentification Ethereum fait partie d'un mouvement plus large vers l'identité auto-souveraine. Les standards et projets dans cet espace incluent :

Complément d'information