Marcio Cunha

Passkeys e WebAuthn: como abandonar senha sem quebrar o login

Descubra como implementar passkeys e WebAuthn para eliminar senhas tradicionais do seu sistema sem alienar usuários ou quebrar fluxos legados de autenticação. Um guia prático de arquitetura e código.

Marcio Cunha12 min
Também disponível em:EnglishEspañol
Resumo
  • A autenticação baseada em criptografia assimétrica elimina os riscos associados ao vazamento de senhas em servidores.
  • O padrão WebAuthn permite interagir com chaves de hardware e biometria do dispositivo de forma nativa através do navegador.
  • Estratégias de migração gradual garantem que usuários legados continuem acessando suas contas enquanto adotam o novo modelo.
  • A experiência do usuário melhora drasticamente ao substituir digitação complexa por um toque na biometria do celular ou computador.
  • Sistemas corporativos e aplicações web modernas ganham blindagem robusta contra ataques de phishing e interceptação.

O Fim da Era das Senhas e a Promessa da Criptografia

As senhas tradicionais falharam. Bilhões delas vazam todos os anos, alimentando ataques automatizados que exploram a mania humana de reutilizar a mesma combinação em múltiplos serviços. Na prática, exigir que o usuário crie uma sequência de caracteres complexa, troque-a a cada noventa dias e ainda consiga memorizá-la é uma falha de design humano, não de tecnologia. A alternativa viável que finalmente está ganhando tração na indústria é o uso de chaves de acesso, conhecidas no mercado como passkeys.

As passkeys utilizam criptografia assimétrica, um conceito engenhoso onde geramos um par de chaves matemáticas: uma chave pública que fica guardada com segurança no servidor da aplicação, e uma chave privada que nunca sai do dispositivo seguro do usuário, como o seu celular ou notebook. Quando você tenta entrar em um site, o servidor envia um desafio matemático que apenas a sua chave privada é capaz de resolver. Na prática, isso significa que mesmo que um invasor invada a base de dados da empresa, ele encontrará apenas chaves públicas inúteis, tornando o roubo massivo de credenciais tecnicamente inviável.

Por Dentro do WebAuthn: O Motor por Trás das Chaves

Por trás das passkeys existe um padrão aberto chamado WebAuthn, criado pelo consórcio W3C em parceria com as maiores empresas de tecnologia do mundo. O WebAuthn é a API que permite aos navegadores web e sistemas operacionais conversarem de forma padronizada com hardwares de segurança e leitores biométricos, como a impressão digital ou reconhecimento facial. Sem essa especificação, cada fabricante criaria sua própria maneira de validar identidades, tornando a vida do desenvolvedor um pesadelo de integrações proprietárias.

Quando implementamos o WebAuthn, dividimos o fluxo em duas etapas fundamentais: o cadastro, conhecido tecnicamente como registro, e a entrada na conta, chamada de autenticação. No registro, o navegador solicita que o autenticador do dispositivo gere um novo par de chaves exclusivamente para aquele site específico. Isso impede um golpe muito comum chamado de phishing, onde um site falso finge ser o original, pois a chave gerada está atrelada estritamente ao endereço real do domínio, bloqueando o uso em qualquer outra URL.

Desenhando uma Arquitetura de Transição Sem Dor

Um dos maiores medos dos engenheiros ao adotar novas tecnologias de autenticação é a quebra do sistema existente para quem não tem dispositivos compatíveis ou simplesmente prefere métodos tradicionais. A transição para passkeys não deve ser um evento binário de "tudo ou nada", mas sim uma migração gradual e inteligente. Na prática, você precisa projetar sua arquitetura para suportar múltiplos fatores de autenticação simultaneamente, permitindo que a chave de acesso conviva pacificamente com senhas e códigos enviados por SMS ou aplicativos autenticadores.

Para facilitar essa convivência, o banco de dados da sua aplicação precisa ser flexível o suficiente para associar um mesmo usuário a múltiplos métodos de credenciais. Cada chave cadastrada ganha um identificador único, um contador de uso para prevenir clonagens e metadados que informam qual tipo de dispositivo foi utilizado. Quando o usuário acessa o sistema, o backend identifica quais opções estão disponíveis para aquela conta e apresenta a interface mais adequada, priorizando a passkey quando o navegador suportar o recurso.

Implementando o Registro com Código Prático

Para colocar a mão na massa, vamos analisar como estruturar o início do processo de registro de uma passkey no lado do servidor. O fluxo começa quando o navegador pede ao backend um conjunto de parâmetros criptográficos, conhecidos como opções de desafio. Abaixo temos um exemplo em Node.js demonstrando como gerar esse payload inicial utilizando uma biblioteca compatível com o padrão.

const { generateRegistrationOptions } = require(\'@simplewebauthn/server\');

async function handleRegistrationRequest(req, res) {
  const user = req.user;
  
  const options = await generateRegistrationOptions({
    rpName: \'Minha Aplicação Segura\',
    rpID: \'app.exemplo.com\',
    userID: user.id,
    userName: user.email,
    attestationType: \'none\',
    excludeCredentials: user.passkeys.map(pk => ({
      id: pk.id,
      type: \'public-key\',
      transports: pk.transports,
    })),
    authenticatorSelection: {
      residentKey: \'preferred\',
      userVerification: \'required\',
    },
  });

  // Salvamos o desafio temporariamente na sessão do usuário
  req.session.currentChallenge = options.challenge;
  
  res.json(options);
}

Esse código prepara o terreno para que o navegador acione o leitor biométrico do usuário. O parâmetro userVerification: 'required' garante que o sistema operacional exija a confirmação física por biometria ou PIN antes de liberar a criação da chave. Isso resolve definitivamente o problema de segurança onde alguém pega o computador desbloqueado de outra pessoa e consegue realizar ações em seu nome.

Lidando com Armadilhas e Casos de Borda

A adoção de tecnologias modernas traz consigo desafios operacionais que exigem atenção redobrada da equipe de engenharia. Um dos cenários mais complexos ocorre quando o usuário troca de celular ou perde o acesso ao dispositivo principal onde a chave estava armazenada. Se a chave foi gerada estritamente em um chip de hardware isolado e sem sincronização em nuvem, o acesso à conta pode ser perdido permanentemente, gerando um pico de chamados no suporte técnico.

Para mitigar esse risco, as principais plataformas do mercado, como Apple, Google e gerenciadores de senha de terceiros, hoje oferecem a sincronização criptografada de passkeys na nuvem. Na prática, isso significa que se você comprar um celular novo, suas chaves de acesso migram de forma segura junto com sua conta, combinando a conveniência do ecossistema com a segurança intransigente da criptografia de chave pública. Como desenvolvedor, seu papel é garantir que existam fluxos alternativos bem definidos de recuperação de conta baseados em identidade verificada.

Considerações Finais e o Futuro Sem Senhas

Abandonar as senhas tradicionais deixou de ser uma utopia de laboratório para se tornar uma realidade viável e altamente recomendada para aplicações modernas. O uso combinado de passkeys e WebAuthn oferece uma blindagem sem precedentes contra ataques de engenharia social, reduz custos operacionais de suporte com redefinições de senha e entrega uma experiência fluida que encoraja os usuários a adotarem melhores práticas de segurança sem esforço adicional.

A jornada de migração exige planejamento arquitetural, testes rigorosos de compatibilidade entre navegadores e uma estratégia inteligente de convivência com métodos legados. No entanto, o esforço compensa amplamente ao posicionar seu produto na vanguarda da segurança digital, eliminando o elo mais fraco de toda a cadeia de computação: o comportamento humano em relação a senhas complexas.