
Está disponível no meu perfil no GitHub um exemplo simples de autenticação de dois fatores (2FA) usando a linguagem PHP. O script foi desenvolvido como uma atividade do curso de Sistemas para Internet da Faculdade de Tecnologia do Estado de São Paulo (FATEC Baixada Santista).
A primeira etapa é o login utilizando um nome de usuário e senha, com verificação via reCAPTCHA. Este método, já abordado antes no blog, existe para garantir que o acesso seja feito por humanos, e não por robôs.
Caso o nome de usuário e estejam corretos, o sistema envia um e-mail utilizando a função mail() do PHP, com um código numérico aleatório de uso único de seis dígitos.
Sem a utilização de um banco de dados, um array dentro de um arquivo PHP armazena os dados de login. Este arquivo, com nome definido no script, não pode ser acessado via browser.
Uma página de configuração simula o cadastro de novos usuários, com senha criptografada usando hash SHA-256. Este método também se aplica para o código numérico aleatório enviado por e-mail a cada acesso.
Além disso, a página de configuração também tem a funcionalidade de apagar o arquivo com a lista de usuários após o término do experimento.

Para facilitar o estudo do script em outros idiomas, todas as mensagens em português provém de constantes definidas no arquivo config.php
, com a tradução em inglês. O código também possui comentários em inglês.
Acesse o repositório com o script de autenticação de dois fatores em PHP
4 respostas para “Script de autenticação de dois fatores em PHP”
Bom dia! Poderia fazer o mesmo, mas em vez de usar o e-mail usar o celular com o google authenticator ou microsoft authenticator, seria muito util e mais seguro.
Olá, Milton. Obrigado pelo comentário!
A intenção do script feito durante o curso foi mostrar como funciona um dos vários métodos de autenticação em dois fatores. Foi desenvolvido durante um curso para fins de estudo.
É possível escrever um código em PHP para utilizar aplicativos como os que você citou como método de 2FA.
E-mails enviados usando a função mail do php não tem autenticação e podem falhar ou cair no spam, recomendaria implementar utilizando o phpmailer ou um servidor de envio de e-mails como o sendgrid
Boa observação. O SendGrid é uma boa alternativa para o envio de e-mails, mas depende do uso da aplicação. Em alguns casos, como aplicações no Google Cloud, é necessária pelo bloqueio do envio pelo PHP.