Como implementar autenticação de dois fatores (2FA) em Node.js com aplicativos autenticadores
Aprenda a implementar autenticação de dois fatores (2FA) em Node.js usando aplicativos autenticadores, TOTP e a biblioteca otplib. Este guia passo a passo cobre tudo, desde a geração de códigos QR até a verificação de códigos de autenticação.
O que é autenticação de dois fatores (2FA)
Em aplicações tradicionais, normalmente usamos Email/Nome de usuário/Telefone como nossos identificadores de identidade. Ao combinar esses identificadores de identidade com senhas correspondentes ou códigos de verificação, podemos concluir o processo de autenticação.
No entanto, em cenários com maiores exigências de segurança, confiar apenas nos identificadores de identidade para autenticação não é suficiente. Isso porque esses identificadores de identidade e suas informações de verificação correspondentes podem ser vulneráveis a vazamentos.
É aqui que a autenticação de dois fatores (2FA) entra em cena - uma camada de segurança adicional que requer que os usuários forneçam dois fatores de autenticação diferentes para verificar sua identidade, garantindo que a pessoa que tenta acessar a conta seja realmente o usuário legítimo.
Métodos comuns de 2FA incluem:
- Autenticação TOTP usando aplicativos autenticadores
- Autenticação biométrica
- Autenticação baseada em dispositivo
- Códigos de verificação via SMS
Neste tutorial, vamos nos concentrar em implementar a 2FA baseada em TOTP usando aplicativos autenticadores com a biblioteca otplib na sua aplicação Node.js.
O que é autenticação TOTP?
TOTP significa senhas únicas baseadas em tempo. Como diz a Wikipedia, é um algoritmo de computador que gera uma senha única (OTP) que usa o tempo atual como fonte de exclusividade.
Com uma chave secreta TOTP compartilhada entre o telefone do usuário e o servidor do aplicativo, o telefone do usuário e o servidor do aplicativo podem gerar o mesmo código TOTP ao mesmo tempo:
Como a geração TOTP depende do tempo, ela pode ser calculada offline. Além disso, o TOTP produz uma string numérica, tornando-o simples e fácil de usar. Portanto, a verificação TOTP é comumente usada como meio de autenticação de dois fatores.
Quando os usuários usam o TOTP como método de autenticação de dois fatores, eles frequentemente enfrentam o desafio de armazenar o segredo TOTP e gerar códigos TOTP. É aí que entram os aplicativos autenticadores. Podemos usar aplicativos autenticadores para armazenar o segredo TOTP e os aplicativos autenticadores gerarão automaticamente códigos TOTP para você. Quando precisar de verificação, basta abrir seu aplicativo autenticador e você obterá o código TOTP correspondente ao segredo TOTP. Aplicativos autenticadores populares incluem Google Authenticator e Microsoft Authenticator.
O processo de implementação do TOTP como autenticação de dois fatores envolve duas etapas:
- Vincular um segredo TOTP ao usuário.
- Verificar o código TOTP do usuário pelo segredo TOTP relacionado.
O processo de vinculação do TOTP a um usuário é o seguinte:
Uma vez que o usuário tenha vinculado o TOTP, ele pode usá-lo para verificação. O processo é o seguinte:
Conforme ilustrado no diagrama, do lado do usuário, usamos aplicativos autenticadores para gerenciar o segredo TOTP e gerar códigos TOTP. Do lado do servidor, precisamos dar suporte para gerar um segredo TOTP e validar o código TOTP enviado pelo usuário. Neste artigo, utilizaremos otplib como exemplo para integrar funcionalidades relacionadas ao TOTP no lado do servidor.
Implementar 2FA baseada em TOTP usando otplib para seu aplicativo Node.js
Supondo que seu aplicativo esteja baseado em Express.js e que os usuários façam login através do endpoint /sign-in
, o plano para suportar TOTP no processo de login do usuário é o seguinte:
- Quando o usuário não estiver vinculado ao TOTP, envie o segredo TOTP para o usuário na forma de um código QR e solicite que ele vincule o TOTP.
- Quando o usuário já estiver vinculado ao TOTP, solicite que ele verifique o TOTP.
Primeiro, vamos instalar as dependências do projeto: otplib
e qrcode
:
Em seguida, vamos aprimorar nosso endpoint /sign-in
.
De acordo com nossa implementação, quando um usuário não está vinculado ao TOTP, enviaremos um código QR para o frontend:
O usuário escaneia o código QR com o aplicativo autenticador, e o aplicativo autenticador gerará um código TOTP e armazenará o segredo TOTP relacionado.
O usuário envia o código TOTP obtido de volta para o servidor do aplicativo. Se o código for verificado com sucesso, podemos então vincular este TOTP ao usuário.
Então, vamos implementar uma API /verify-totp
para receber o código TOTP enviado pelo usuário:
Dessa forma, vincularmos o TOTP com sucesso para o usuário. Posteriormente, quando o usuário fizer login, ele só precisará abrir o Aplicativo Autenticador, enviar o código de verificação correspondente ao segredo TOTP previamente vinculado, e o processo de autenticação estará concluído.
Na API /verify-totp
, utilizamos o segredo TOTP previamente vinculado ao usuário para verificar o código TOTP.
Resumo
Com base neste artigo, agora você deve ser capaz de integrar verificação de aplicativos autenticadores para seus aplicativos.
No entanto, este é apenas um exemplo simples. Quando seu aplicativo é grande ou prevê-se que se torna complexo, integrar um novo método de autenticação pode incorrer em custos significativos.
A boa notícia é: Logto, atuando como um fornecedor abrangente de soluções de autenticação de identidade, oferece suporte a autenticação multifator (MFA), incluindo verificação de aplicativos autenticadores. Ao usar o Logto, você pode integrar de forma suave um processo de login seguro e eficiente com MFA no seu aplicativo em apenas alguns minutos!