MD
Autenticação de Dois Fatores (TFA) Funcional com Template III
Olá,
A algum tempo vinha buscando uma solução interessante de autenticação de duplo fator (TFA, Two Factor Authentication), encontrei algumas boas ferramentas, mas eram complexas (na minha opinião) de integrar com o Adianti.
Em minha pesquisa, acabei encontrando um material bem explicativo, por fim, crie um componente simples, mas funcional chamado TitansTFA6238 que implementa a autenticação de duplo fator baseada na RFC6238.
Para facilitar a compreensão, adequei de maneira simples o Template III (disponibilizado em anexo) para suportar a autenticação dupla. Nele é possível verificar quais usuários tem TFA habilitado, tanto o administrador quando o usuário comum podem habilitar o TFA (o user apenas pode modificar o comportamento do seu usuário), quando habilitado o TFA uma mensagem mostra detalhes de uso, bem como um QRcode que pode ser lido pelo Google Autenticador por exemplo (há outras ferramentas e extensões que podem trabalhar com a mesma RFC de autenticação). Por fim o formulário de login verifica quais usuários usam TFA e na sequência de receber um user e senha válidos questiona o código TFA que pode ser verificado no aplicativo/extensão.
Antes de mais nada, recomento a leitura do materia disponibilizado em: https://www.codementor.io/slavko/google-two-step-authentication-otp-generation-d
O Template III sofreu pequenas modificações (devidamente comentadas), as modificações estão listadas abaixo:
* app/database/permission.db (e arquivo sql) - Modificada a tabela system_user, a essa tabela foram adicionadas duas colunas, use_tfa (flag que habilita o uso do tfa) e tfa_key (chave do usuário)
* app/model/admin/SystemUser.class.php - adicionados os atributos use_tfa e tfa_key
* app/control/admin/SystemUserList.class.php - adicionada coluna na listagem com ícone que mostra se o TFA esta ativado ou não
* app/control/admin/SystemUserForm.class.php - adicionado RadioButton para ativar ou desativar o TFA
* app/control/admin/SystemProfileForm.class.php - adicionado RadioButton para que o usuário possa ativar ou desativar o TFA
* app/control/admin/LoginForm.class.php - modificado a classe de login para que ela verifique se o usuário usa TFA, e nesse caso, solicitar a código após informar o usuário e senha corretos
* app/lib/TitansTFA6238.class.php - classe que gera a chave TFA do usuário e posteriormente válida os códigos informados pelo mesmo, essa mesma classe gera o QRcode necessário para ler no celuar
Para quem esta familiarizado com o GIT, o template em anexo foi versionado (dado um commit incial nos arquivos originais), logo, executando um git status ou git diff pode-se verificar ainda mais facilmente as modificações realizadas.
Para testar, baixe o anexo, descompacte no seu webserver, acesse com o usuário e senha (admin/admin), habilite o TFA, copie a chave para uma extensão que trabalhe com a RFA ou use o leitor de QRcode do Google Autenticador, por fima, deslogue-se e logue novamente, logo após logar será solicitada a chave aleatória que pode ser observada no aplicativo/extensão.
Espero que o material seja útil.
Um abraço!
A algum tempo vinha buscando uma solução interessante de autenticação de duplo fator (TFA, Two Factor Authentication), encontrei algumas boas ferramentas, mas eram complexas (na minha opinião) de integrar com o Adianti.
Em minha pesquisa, acabei encontrando um material bem explicativo, por fim, crie um componente simples, mas funcional chamado TitansTFA6238 que implementa a autenticação de duplo fator baseada na RFC6238.
Para facilitar a compreensão, adequei de maneira simples o Template III (disponibilizado em anexo) para suportar a autenticação dupla. Nele é possível verificar quais usuários tem TFA habilitado, tanto o administrador quando o usuário comum podem habilitar o TFA (o user apenas pode modificar o comportamento do seu usuário), quando habilitado o TFA uma mensagem mostra detalhes de uso, bem como um QRcode que pode ser lido pelo Google Autenticador por exemplo (há outras ferramentas e extensões que podem trabalhar com a mesma RFC de autenticação). Por fim o formulário de login verifica quais usuários usam TFA e na sequência de receber um user e senha válidos questiona o código TFA que pode ser verificado no aplicativo/extensão.
Antes de mais nada, recomento a leitura do materia disponibilizado em: https://www.codementor.io/slavko/google-two-step-authentication-otp-generation-d
O Template III sofreu pequenas modificações (devidamente comentadas), as modificações estão listadas abaixo:
* app/database/permission.db (e arquivo sql) - Modificada a tabela system_user, a essa tabela foram adicionadas duas colunas, use_tfa (flag que habilita o uso do tfa) e tfa_key (chave do usuário)
* app/model/admin/SystemUser.class.php - adicionados os atributos use_tfa e tfa_key
* app/control/admin/SystemUserList.class.php - adicionada coluna na listagem com ícone que mostra se o TFA esta ativado ou não
* app/control/admin/SystemUserForm.class.php - adicionado RadioButton para ativar ou desativar o TFA
* app/control/admin/SystemProfileForm.class.php - adicionado RadioButton para que o usuário possa ativar ou desativar o TFA
* app/control/admin/LoginForm.class.php - modificado a classe de login para que ela verifique se o usuário usa TFA, e nesse caso, solicitar a código após informar o usuário e senha corretos
* app/lib/TitansTFA6238.class.php - classe que gera a chave TFA do usuário e posteriormente válida os códigos informados pelo mesmo, essa mesma classe gera o QRcode necessário para ler no celuar
Para quem esta familiarizado com o GIT, o template em anexo foi versionado (dado um commit incial nos arquivos originais), logo, executando um git status ou git diff pode-se verificar ainda mais facilmente as modificações realizadas.
Para testar, baixe o anexo, descompacte no seu webserver, acesse com o usuário e senha (admin/admin), habilite o TFA, copie a chave para uma extensão que trabalhe com a RFA ou use o leitor de QRcode do Google Autenticador, por fima, deslogue-se e logue novamente, logo após logar será solicitada a chave aleatória que pode ser observada no aplicativo/extensão.
Espero que o material seja útil.
Um abraço!
Por duas vezes tentei upar o componente/template mas sem sucesso (talvez por conta do tamanho), logo disponibilizei o mesmo no link abaixo:
https://repo.plenatech.com.br/TitansTFA.zip
Aproveitando, o comentário, explore o componente e a implementação do mesmo, no template ele esta implementado de forma "simples", em meu cenário de produção, utilizo chaves maiores, notifico o usuário por e-mail quado o TFA é ativado/desativado e não permito que o usuário comum habilite ou desabilite o TFA sem confirmar a sua senha, isso evita que alguém má intencionado ative (sem o usuário saber e acabe ficando sem acesso) ou desative (para entrar somente com a senha depois).
neste ZIP, o admin , ja esta usando a autenticação, então a primeira coisa , é entrar direto na base de dados permission e desabilitar o TFA, para voce poder configurar.
Não consegui usar, peço ajuda, quando habilito o TFA, aparece uma janela com um codigo de barras, vou no meu app do cel google , escaneo o codigo e me da um erro, que o codigo é invalido . estou usando localmente ? preciso estar em um servidor na internet para usar ou da pra usar local ? será que é esse meu problema ?
não consegui adicionar pelo autenticador da google, mas abri um outro leitor de de QRCODE , scaneei o qrcode e envie para o aplicativo da google e deu certo. só nao entendi porque não criou a conta diretamente ?
Olá, bom dia,
Luiz, você conseguiu implementar?
Baixei aqui e rodou tranquilamente, e sim, você pode testar localmente sem que para isso haja internet.
Bom dia Marco, pelo link não estou conseguindo baixar, se for possível e se você ainda tiver disponível, gostaria de implementar nos meus projetos, para que eu possa estudar e implementar lhe agradeço.
Olá, boa tarde!
O Link estava quebrado devido a uma implementação de SSL/HTTPS.
Abaixo o link corrigido, me faça saber se obteve sucesso no download.
https://repo.plenatech.com.br/TitansTFA.zip
Muito obrigado consegui sim baixar, lhe agradeço imensamente vou estudar para fazer esta implementação!!!