Como implementar autenticação de dois fatores (2FA) em Node.js com aplicações autenticadoras
Aprenda a implementar a autenticação de dois fatores (2FA) em Node.js usando aplicações autenticadoras, TOTP e a biblioteca otplib. Este guia passo-a-passo cobre tudo, desde a geração de códigos QR até à verificação de códigos de autenticação.
O que é a autenticação de dois fatores (2FA)
Em aplicações tradicionais, tipicamente usamos Email/Nome de utilizador/Telefone como identificadores de identidade. Ao combinar esses identificadores de identidade com palavras-passe correspondentes ou códigos de verificação, podemos concluir o processo de autenticação.
No entanto, em cenários com requisitos de segurança mais elevados, confiar apenas em identificadores de identidade para autenticação não é suficiente. Isto deve-se ao facto de que estes identificadores de identidade e as suas informações de verificação correspondentes podem ser vulneráveis a falhas de segurança.
É aqui que a autenticação de dois fatores (2FA) entra em cena - uma camada de segurança adicional que requer que os utilizadores forneçam dois fatores de autenticação diferentes para verificar a sua identidade, garantindo que a pessoa que tenta aceder à conta é realmente o utilizador legítimo.
Os métodos comuns de 2FA incluem:
- Autenticação TOTP usando aplicações autenticadoras
- Autenticação biométrica
- Autenticação com base em dispositivos
- Códigos de verificação SMS
Neste tutorial, vamos focar-nos na implementação de 2FA baseada em TOTP usando aplicações autenticadoras com a biblioteca otplib na sua aplicação Node.js.
O que é a autenticação TOTP?
TOTP significa senhas únicas baseadas no tempo. Conforme diz a Wikipedia, é um algoritmo informático que gera uma senha única (OTP) que usa o tempo atual como uma fonte de exclusividade.
Com uma chave secreta TOTP partilhada entre o telemóvel do utilizador e o servidor da aplicação, tanto o telemóvel como o servidor podem gerar o mesmo código TOTP no mesmo ponto no tempo:
Uma vez que a geração de TOTP depende do tempo, pode ser calculada offline. Além disso, TOTP produz uma sequência numérica, tornando-o simples e amigável ao utilizador. Assim, a verificação de TOTP é geralmente usada como um meio de autenticação de 2 fatores.
Quando os utilizadores usam TOTP como método de autenticação de 2 fatores, frequentemente encontram o desafio de armazenar o segredo TOTP e gerar códigos TOTP. É aqui que as aplicações autenticadoras são úteis. Podemos usar aplicações autenticadoras para armazenar o segredo TOTP e estas aplicações irão gerar automaticamente códigos TOTP para ti. Quando a verificação é necessária, basta abrir a tua aplicação autenticadora e obterás o código TOTP correspondente ao segredo TOTP. Aplicações autenticadoras populares incluem Google Authenticator e Microsoft Authenticator.
O processo de implementação de TOTP como autenticação de dois fatores envolve dois passos:
- Associar um segredo TOTP ao utilizador.
- Verificar o código TOTP do utilizador através do segredo TOTP relacionado.
O processo de associação de TOTP a um utilizador é o seguinte:
Uma vez que o utilizador tenha associado TOTP, pode usá-lo para verificação. O processo é o seguinte:
Conforme ilustrado no diagrama, do lado do utilizador, usamos aplicações autenticadoras para gerir o segredo TOTP e gerar códigos TOTP. Do lado do servidor, precisamos de suportar a geração de um segredo TOTP e a validação do código TOTP enviado pelo utilizador. Neste artigo, iremos usar otplib como exemplo para integrar funcionalidades relacionadas com TOTP no lado do servidor.
Implementar 2FA baseada em TOTP usando otplib para a tua aplicação Node.js
Supondo que a tua aplicação é baseada em Express.js, e os utilizadores autenticam-se através do endpoint /sign-in
, o plano para suportar TOTP no processo de autenticação do utilizador é o seguinte:
- Quando o utilizador não está associado a TOTP, enviar o segredo TOTP para o utilizador na forma de um código QR e solicitar que associe TOTP.
- Quando o utilizador já está associado a TOTP, solicitar a verificação de TOTP.
Primeiro, vamos instalar as dependências para o projeto: otplib
e qrcode
:
A seguir, vamos melhorar o nosso endpoint /sign-in
.
De acordo com a nossa implementação, quando um utilizador não está associado a TOTP, enviaremos um código QR para o frontend:
O utilizador escaneia o código QR com a aplicação autenticadora, e a aplicação autenticadora gerará um código TOTP e armazenará o segredo TOTP relacionado.
O utilizador envia o código TOTP obtido de volta ao servidor da aplicação. Se o código for verificado com sucesso, podemos então associar este TOTP ao utilizador.
Assim, vamos implementar uma API /verify-totp
para receber o código TOTP enviado pelo utilizador:
Desta forma, associámos com sucesso TOTP para o utilizador. Subsequentemente, quando o utilizador autenticar-se, só precisa de abrir a Aplicação Autenticadora, enviar o código de verificação correspondente ao segredo TOTP previamente associado, e o processo de autenticação será concluído.
Na API /verify-totp
, usamos o segredo TOTP previamente associado ao utilizador para verificar o código TOTP.
Resumo
Com base neste artigo, deves agora ser capaz de integrar a verificação de aplicação autenticadora para as tuas aplicações.
No entanto, este é apenas um exemplo simples. Quando a tua aplicação é grande ou espera-se que se torne complexa, integrar um novo método de autenticação pode implicar custos significativos.
A boa notícia é: Logto, servindo como um fornecedor abrangente de soluções de autenticação de identidade, oferece suporte de autenticação multifatorial (MFA), incluindo verificação de aplicações autenticadoras. Ao aproveitares Logto, podes integrar de forma perfeita um processo de autenticação de utilizador seguro e eficiente com MFA na tua aplicação em apenas alguns minutos!