Esse é um projeto desenvolvido para entender melhor o funcionamento da autenticação de dois fatores e como ela pode ser utilizada em aplicações para promover um ambiente mais seguro para os usuários.
Importante destacar que o código fornecido é apenas uma abordagem simples de como funciona a autenticação de dois fatores, desenvolvida com base nos estudos sobre a speakeasy.
Este projeto utiliza a biblioteca speakeasy
para implementar a autenticação de dois fatores. Vou apresentar alguns pontos que considero importantes acerca do projeto:
-
Uma secret (segredo) é gerada de forma segura e deve ser guardada com segurança e sempre deve ser vinculada ao usuário (importante assegurar que o usuário possa em qualquer tempo gerar uma nova secret).
-
Quando o usuário realizar login com autenticação de dois fatores, ele deve fornecer o código de 6 dígitos gerado por um aplicativo de autenticação, como o Google Authenticator, Microsoft Authenticator, Duo Mobile, etc.
-
O servidor verifica se o código de 6 dígitos é válido usando a função
Speakeasy.totp.verify
quando você envia uma requisição do tipoPOST
parahttp://localhost:3000/validate
, seguindo o exemplo abaixo:curl --request POST \ --url http://localhost:3000/validate \ --header 'Content-Type: application/json' \ --data '{ "code": "586925" }'
-
É fundamental ressaltar o uso de uma criptografia mais segura. No exemplo, foi utilizada a codificação base32, no entanto, é importante observar que existem opções de criptografia mais recomendadas e seguras.
-
O projeto também gera uma URL para o QR code, que deve ser escaneado pelo aplicativo de autenticação para configurar a autenticação de dois fatores. O QR code é exibido no terminal para que você consiga escaneia-lo.
- Node instalado e devidamente configurado no seu dispositivo.
-
Clone o repositório para sua máquina local:
git clone https://github.com/ayrtonfilho/two-factor-authentication.git
-
Instale as dependências do projeto:
npm install
-
Faça a execução com o comando:
npm run start
-
O servidor estará ouvindo na porta 3000.
Este projeto está licenciado sob a Licença MIT.