Autenticação de dois fatores (2FA): guia completo para desenvolvedores
O que é autenticação de dois fatores, quais tipos existem, onde aplicar no seu produto e como implementar 2FA por código no backend sem complicar a vida do usuário.
Senha vaza. Seja por reutilização, phishing ou vazamento de outro site, cedo ou tarde alguma senha dos seus usuários vai parar na mão errada. A autenticação de dois fatores (2FA) existe para que isso não seja suficiente para invadir uma conta.
Neste guia você vai entender os tipos de 2FA, onde vale a pena aplicar e como implementar no seu backend.
O que é autenticação de dois fatores
2FA é exigir duas provas diferentes de identidade para liberar o acesso. As provas costumam ser de três categorias:
- Algo que você sabe – senha, PIN.
- Algo que você tem – celular, chave de segurança, app autenticador.
- Algo que você é – biometria.
O ponto é combinar categorias diferentes. Senha + pergunta secreta não é 2FA de verdade, porque as duas são "algo que você sabe".
Tipos de 2FA mais usados
Código por mensagem (WhatsApp, SMS, e-mail)
O servidor envia um código OTP para o telefone ou e-mail da pessoa.
- Prós: nada para instalar, todo mundo entende, serve também para verificar o telefone no cadastro.
- Contras: depende da entrega da mensagem; SMS tem riscos como SIM swap.
App autenticador (TOTP)
Códigos que mudam a cada 30 segundos, gerados no celular.
- Prós: funciona offline, não tem custo por código.
- Contras: exige instalar app e fazer pareamento; quem troca de celular sem backup perde o acesso.
Chaves de segurança e passkeys
Baseadas em criptografia de chave pública (FIDO2/WebAuthn).
- Prós: muito resistentes a phishing.
- Contras: adoção ainda menor e implementação mais complexa.
Para a maioria dos produtos B2C no Brasil, o código por WhatsApp é o melhor equilíbrio entre segurança e adesão. Usuários que querem mais proteção podem ativar um app autenticador ou passkey como opção extra.
Onde aplicar 2FA no seu produto
Pedir código em toda ação irrita o usuário. Aplique 2FA nos momentos de risco:
- Login em dispositivo novo ou de localização incomum.
- Troca de e-mail, telefone ou senha.
- Operações financeiras: saque, pagamento, alteração de chave Pix ou dados bancários.
- Ações destrutivas: excluir conta, revogar acessos, exportar dados.
- Cadastro: verificar que o telefone informado é mesmo da pessoa.
Como implementar 2FA por código no backend
O fluxo tem três etapas e cabe em poucas linhas com uma API de OTP.
1. Depois que a senha estiver correta, envie o código:
curl https://api.aut2fa.com/v1/send \
-H "Authorization: Bearer ak_live_…" \
-H "Content-Type: application/json" \
-d '{"to": "+5531999999999", "locale": "pt-BR"}'
Guarde o id do envio numa sessão parcial, que ainda não dá acesso ao sistema.
2. Mostre a tela para digitar o código. (Veja as boas práticas de UX para essa tela.)
3. Verifique o código e só então crie a sessão completa:
curl https://api.aut2fa.com/v1/send/snd_8Kq2wR7tXz/verify \
-H "Authorization: Bearer ak_live_…" \
-H "Content-Type: application/json" \
-d '{"code": "482913"}'
Se a resposta tiver valid: true, libere o acesso. Se não, mostre as tentativas restantes (attempts_left).
Erros comuns ao implementar 2FA
- Liberar a sessão antes de verificar o código. A sessão parcial não pode acessar nada.
- Não limitar tentativas. Um código de 6 dígitos tem 1 milhão de combinações; sem limite, força bruta resolve. Na aut2fa o envio é bloqueado depois de 5 erros.
- Código que não expira. Use prazos curtos (a aut2fa expira em 10 minutos).
- Reenvio sem limite. Abre espaço para abuso e SMS pumping.
- Guardar o código em texto puro. Na aut2fa o código fica criptografado até o envio e, depois, só um hash é mantido.
- Não ter caminho de recuperação. Pense no usuário que perdeu o celular.
Conclusão
2FA é uma das medidas de segurança com melhor custo-benefício que existem. Comece pelos momentos de maior risco, use um canal que o seu público já usa e cuide dos limites.
Com a aut2fa você implementa 2FA por WhatsApp com duas chamadas HTTP. Crie sua conta grátis e teste com a chave ak_test_.