Pular para o conteúdo principal
Change page

Autenticação no Ethereum

Se você vem do desenvolvimento web tradicional, está acostumado com login por nome de usuário/senha, fluxos OAuth e cookies de sessão. A autenticação no Ethereum funciona de maneira diferente — e, de muitas formas, mais simples.

No Ethereum, um usuário prova sua identidade assinando uma mensagem com sua carteira. Nenhuma senha para armazenar. Nenhum banco de dados de credenciais para vazar. Apenas criptografia.

Como é diferente da Web2?

Web2Ethereum
Nome de usuário + senhaEndereço da carteira + assinatura
Servidor armazena credenciaisUsuário detém a chave privada
Sessões gerenciadas por cookies / JWTSessões começam com uma assinatura de carteira offchain
"Entrar com o Google""Entrar com o Ethereum"
Fluxos de redefinição de senhaRecuperação por frase semente

A mudança fundamental: na Web2, um servidor centralizado autentica você. No Ethereum, você autentica a si mesmo provando que controla um endereço específico — e qualquer pessoa pode verificá-lo de forma independente.

Pré-requisitos

Certifique-se de que você entende:

Como funciona a autenticação baseada em carteira

O fluxo principal é simples:

  1. Seu aplicativo descentralizado (dapp) pede ao usuário para conectar sua carteira (via MetaMask, Rainbow, WalletConnect, etc.)
  2. A carteira compartilha o endereço Ethereum do usuário - este é o seu identificador público
  3. Seu dapp gera uma mensagem única (um nonce ou desafio)
  4. O usuário assina a mensagem com sua chave privada (ocorre dentro da carteira)
  5. Seu backend verifica a assinatura em relação ao endereço reivindicado
  6. Se for válida, o usuário é autenticado

Nenhuma senha foi digitada, armazenada ou transmitida.

Entrar com o Ethereum (EIP-4361)

A EIP-4361 (abre em uma nova aba) define um formato de mensagem padrão para login no Ethereum, comumente chamado de SIWE (Sign-In with Ethereum). Ela substitui a assinatura de mensagens ad-hoc por um padrão estruturado e seguro.

Uma mensagem SIWE se parece com isto:

Principais recursos do SIWE:

  • Vinculação de domínio - a mensagem inclui o domínio, prevenindo phishing
  • ID da cadeia (Chain ID) - especifica para qual rede a assinatura é válida
  • Nonce - previne ataques de repetição (replay attacks)
  • Expiração - carimbo de data/hora (timestamp) opcional que limita a janela de validade
  • Recursos - URIs opcionais para acesso com escopo

Bibliotecas SIWE

Exemplo: login no lado do cliente com siwe

Exemplo: verificação no lado do servidor (Node.js)

Bibliotecas de conexão de carteira

Antes de autenticar, você precisa que o usuário conecte sua carteira. Estas bibliotecas facilitam isso:

Verificando assinaturas manualmente

Se você preferir não usar o SIWE, pode verificar as assinaturas diretamente:

Notas importantes de segurança

  • Sempre use um nonce - previne ataques de repetição onde uma assinatura antiga é reutilizada
  • Inclua o domínio - impede que as assinaturas sejam válidas em sites diferentes
  • Verifique a expiração - as assinaturas devem ter uma janela de validade limitada
  • Use SIWE (EIP-4361) quando possível - ele lida com tudo isso para você
  • Nunca exponha chaves privadas - a assinatura ocorre dentro da carteira; seu aplicativo vê apenas o resultado

Gerenciamento de sessão

Uma vez autenticado, você ainda precisa de sessões — assim como na Web2. Padrões comuns:

  • Tokens JWT - emita um JWT após verificar a assinatura, use para solicitações de API
  • Sessões no lado do servidor - armazene o endereço verificado em um cookie de sessão
  • SIWE com recursos - defina tokens de acesso com escopo vinculados a URIs específicos

A principal diferença da Web2: o endereço Ethereum do usuário é sua identidade persistente. Eles podem usá-lo em qualquer dapp sem criar uma nova conta.

Identidade descentralizada

A autenticação no Ethereum faz parte de um movimento mais amplo em direção à identidade autossuficiente (self-sovereign identity). Padrões e projetos neste espaço incluem:

Leitura adicional