Saltar al contenido principal
Change page

Autenticación en Ethereum

Si viene del desarrollo web tradicional, estará acostumbrado al inicio de sesión con nombre de usuario y contraseña, a los flujos de OAuth y a las cookies de sesión. La autenticación en Ethereum funciona de manera diferente y, en muchos sentidos, de forma más sencilla.

En Ethereum, un usuario demuestra su identidad al firmar un mensaje con su billetera. No hay contraseñas que almacenar. No hay bases de datos de credenciales que se puedan filtrar. Solo criptografía.

¿En qué se diferencia de la Web2?

Web2Ethereum
Nombre de usuario + contraseñaDirección de la billetera + firma
El servidor almacena credencialesEl usuario posee la clave privada
Sesiones gestionadas por cookies / JWTLas sesiones comienzan con una firma de billetera fuera de la cadena
"Iniciar sesión con Google""Iniciar sesión con Ethereum"
Flujos de restablecimiento de contraseñaRecuperación con frase semilla

El cambio fundamental: en la Web2, un servidor centralizado lo autentica. En Ethereum, usted se autentica a sí mismo demostrando que controla una dirección específica, y cualquiera puede verificarlo de forma independiente.

Requisitos previos

Asegúrese de comprender:

Cómo funciona la autenticación basada en billeteras

El flujo principal es sencillo:

  1. Su aplicación descentralizada (dapp) le pide al usuario que conecte su billetera (a través de MetaMask, Rainbow, WalletConnect, etc.)
  2. La billetera comparte la dirección de Ethereum del usuario: este es su identificador público
  3. Su dapp genera un mensaje único (un nonce o desafío)
  4. El usuario firma el mensaje con su clave privada (ocurre dentro de la billetera)
  5. Su backend verifica la firma con la dirección reclamada
  6. Si es válida, el usuario queda autenticado

Nunca se escribió, almacenó ni transmitió ninguna contraseña.

Iniciar sesión con Ethereum (EIP-4361)

EIP-4361 (se abre en una pestaña nueva) define un formato de mensaje estándar para el inicio de sesión en Ethereum, comúnmente llamado SIWE (Sign-In with Ethereum). Reemplaza la firma de mensajes ad-hoc con un estándar estructurado y seguro.

Un mensaje SIWE se ve así:

Características clave de SIWE:

  • Vinculación de dominio: el mensaje incluye el dominio, lo que previene el phishing
  • ID de la cadena: especifica para qué red es válida la firma
  • Nonce: previene los ataques de repetición
  • Caducidad: marca de tiempo opcional que limita la ventana de validez
  • Recursos: URI opcionales para acceso con alcance limitado

Bibliotecas SIWE

Ejemplo: inicio de sesión del lado del cliente con siwe

Ejemplo: verificación del lado del servidor (Node.js)

Bibliotecas de conexión de billeteras

Antes de autenticar, necesita que el usuario conecte su billetera. Estas bibliotecas lo facilitan:

Verificación manual de firmas

Si prefiere no usar SIWE, puede verificar las firmas directamente:

Notas importantes de seguridad

  • Use siempre un nonce: previene los ataques de repetición en los que se reutiliza una firma antigua
  • Incluya el dominio: evita que las firmas sean válidas en diferentes sitios
  • Compruebe la caducidad: las firmas deben tener una ventana de validez limitada
  • Use SIWE (EIP-4361) cuando sea posible: se encarga de todo lo anterior por usted
  • Nunca exponga las claves privadas: la firma ocurre dentro de la billetera; su aplicación solo ve el resultado

Gestión de sesiones

Una vez autenticado, seguirá necesitando sesiones, al igual que en la Web2. Patrones comunes:

  • Tokens JWT: emita un JWT después de verificar la firma, utilícelo para solicitudes a la API
  • Sesiones del lado del servidor: almacene la dirección verificada en una cookie de sesión
  • SIWE con recursos: defina tokens de acceso con alcance limitado vinculados a URI específicos

La diferencia clave con la Web2: la dirección de Ethereum del usuario es su identidad persistente. Pueden usarla en cualquier dapp sin crear una cuenta nueva.

Identidad descentralizada

La autenticación de Ethereum es parte de un movimiento más amplio hacia la identidad autosoberana. Los estándares y proyectos en este espacio incluyen:

Lecturas adicionales