Blog

Postado em em 25 de abril de 2023

Autenticação de Dois Fatores – Como Funciona e Como Criar no Python?

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")
QRCode
QRCode

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.

Conclusão – Autenticação de Dois Fatores

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,

Hashtag Treinamentos

Para acessar outras publicações de Python, clique aqui!


Quer aprender mais sobre Python com um minicurso básico gratuito?

Quer sair do zero no Python e virar uma referência na sua empresa? Inscreva-se agora mesmo no Python Impressionador