Você sabe como criar no Python uma autenticação de dois fatores? Nesta aula vamos desenvolver esta incrível ferramenta de segurança!
Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo ou acesse o nosso canal do YouTube!
Para receber por e-mail o(s) arquivo(s) utilizados na aula, preencha:
Fala Impressionadores! Na aula de hoje eu quero te mostrar como funciona autenticação de 2 fatores que você já deve ter ouvido falar ou já até usa.
Vou te explicar o que é e como criar autenticação de 2 fatores no Python para utilizar nas suas próprias aplicações!
A ideia é pegar uma chave mestra, vou te mostrar como criar chave mestra no Python, e com essa chave vamos conseguir criar um código de verificação.
Com isso vamos aprender como gerar QRCode no Python para que você consiga passar essa chave para aplicativos de autenticação (pode ser o que você tiver).
O que é a autenticação de 2 fatores?
Você já deve ter passado pela experiência de tentar entrar em um site e ele te pedir o login, a senha e depois ainda pedir para autenticar uma mensagem recebida em seu celular, certo?
A técnica que vou te ensinar nesta aula vai usar os aplicativos de autenticação, existem alguns aplicativos de autenticação como o Google Authenticator, Microsoft Authenticator, etc.
Esses aplicativos geram um código novo a cada 30 segundos e este código você consegue utilizar como senha para ter acesso ao sistema, funciona como uma camada extra de segurança.
Como os aplicativos de autenticação funcionam?
Basicamente o site já gera este número de autenticação a cada 30 segundos o que o aplicativo faz é gerar o mesmo código a cada 30 segundos também partindo da mesma chave, esta lógica é construída de forma inteligente para que duas pessoas nunca consigam geram o mesmo código ao mesmo tempo.
Bibliotecas necessárias
Para fazer esta aplicação é necessário instalar algumas bibliotecas, no seu terminal digite:
>pip install pyotp
Após a instalação, importe as bibliotecas:
Import Time -> faz os testes de gerar o código e esperar 30 segundos
Import pyotp -> cria a autenticação de 2 fatores
Chave mestra
Se nós precisamos que o celular e o computador gerem o mesmo código ao mesmo tempo, precisamos que ambos partam de uma mesma chave mestra.
O que vamos fazer é criar uma chave com números aleatórios que não vai ficar disponível para nenhum usuário, porque a partir deste número todas as chaves vão ser geradas.
chave_mestre = "T6HJMBUJHD7W3DWU4KE7FRDE6EOFIM3J"
Para gerar esta chave podemos usar a própria biblioteca pyotp:
Print(pyotp.randam_base32())
Usando o código acima geramos um código com 32 caracteres no terminal, após isso podemos copiar e colar na nossa chave_mestre.
Obs. não precisamos mais da linha de código acima após gerar a primeira chave mestra, tudo que for criado agora será a partir desta primeira chave que já copiamos para o código.
Como gerar o código de autenticação de dois fatores?
codigo = pyotp.TOTP(chave_mestre)
print(codigo.now())
Este código TOTP vai gerar uma senha baseada no tempo, logo abaixo vamos printar usando o NOW que vai printar a cada 30 segundos por padrão.
Como usar esse código para implementar em um sistema?
Vamos utilizar o imput para pedir que o usuário insira uma senha e comparar o que o usuário escreveu com o código gerado (codigo.verify).
Se o que o usuário escreveu e o código gerado forem iguais, o código resulta em verdadeiro (true), se o usuário digitar o número errado ou digitar o número após os 30 segundos o resultado será falso (false).
codigo_usuario = input("Codigo: ")
print(codigo.verify(codigo_usuario))
Como passar este código para um aplicativo?
Essencialmente esses aplicativos funcionam lendo um QRCode, então o primeiro passo é instalar no nosso terminal uma biblioteca chamada QRCode:
>pip install qrcode
Após rodar a instalação vamos baixar a biblioteca:
import time
import pyotp
import qrcode
Feito isso, vamos gerar um link para o nosso sistema usando novamente a biblioteca pyotp:
link = pyotp.TOTP(chave_mestre).provisioning_uri(name="lira", issuer_name="CodigoPython")
print(link)
Geralmente no código acima, completamos o nome dentro dos parênteses com o nome do usuário e o issuer_name completamos com o nome da plataforma que está sendo usada.
Vamos agora, transformar o link que acabamos de gerar em um QRCode e salvar como “qrcode.png”.
meu_qrcode = qrcode.make(link)
# meu_qrcode.save("qrcode.png")
Observe que agora foi gerado um novo arquivo, clicando nele vamos ver o QRCode que geramos, só precisamos pegar o aplicativo de autenticação de 2 fatores e adicionar este QRCode dentro.
Geralmente estes aplicativos têm a opção Ler QRCode, entre nesta opção e aponte o celular para o QRCode gerado no nosso programa.
Agora o código gerado no celular é o mesmo que será pedido no programa para o usuário, porque estão interligados:
Código Completo
import time
import pyotp
import qrcode
chave_mestre = "T6HJMBUJHD7W3DWU4KE7FRDE6EOFIM3J"
codigo = pyotp.TOTP(chave_mestre)
#print(codigo.now())
codigo_usuario = input("Codigo: ")
print(codigo.verify(codigo_usuario))
# link = pyotp.TOTP(chave_mestre).provisioning_uri(name="lira", issuer_name="CodigoPython")
# print(link)
#
# meu_qrcode = qrcode.make(link)
# meu_qrcode.save("qrcode.png")
Um ponto importante é que o celular e o computador que foram gerar esses códigos, devem estar alinhados ao nível de segundos, se os horários estiverem diferentes, como o código é gerada a cada 30 segundos a autenticação não vai ocorrer de forma correta.
Nesta aula trouxe um sistema de autenticação simples de fazer com Python, sistemas de autenticação são muito usados para melhorar a segurança de sites e aplicativos e é muito normal no dia a dia de quem usa a internet, para construir esta lógica usamos ferramentas importantes no Python como a instalação de bibliotecas, uso do imput, variáveis, etc.
Lembrando que nesse sistema é importante que o horário do seu computador esteja sincronizado com o horário da internet.
Espero que gostem! Até mais! Abraço,
Para acessar outras publicações de Python, clique aqui!
Expert em conteúdos da Hashtag Treinamentos. Auxilia na criação de conteúdos de variados temas voltados para aqueles que acompanham nossos canais.