L'autenticazione a due fattori (2FA) è una misura di sicurezza che aggiunge un ulteriore livello di protezione agli account degli utenti. In questo articolo vedremo come implementare un semplice sistema 2FA in Python utilizzando pyotp per generare OTP (One-Time Password) e qrcode per generare il codice QR scansionabile da app come Google Authenticator o Authy.
Requisiti
Prima di iniziare, assicurati di avere installati i seguenti pacchetti:
pip install pyotp qrcode[pil]
Generare un secret OTP
Per ogni utente, è necessario generare un secret condiviso da utilizzare per la generazione degli OTP.
import pyotp
# Genera un secret casuale per l'utente
secret = pyotp.random_base32()
print("Secret 2FA:", secret)
Generare un codice QR
Il codice QR può essere scansionato con un'app di autenticazione per configurare facilmente il 2FA.
import qrcode
# Crea un oggetto TOTP
totp = pyotp.TOTP(secret)
uri = totp.provisioning_uri(name="utente@example.com", issuer_name="LaMiaApp")
# Genera il codice QR
qrcode.make(uri).save("qrcode_2fa.png")
print("Codice QR salvato come qrcode_2fa.png")
Verificare l'OTP
Dopo che l'utente ha configurato il 2FA, può fornire un OTP da verificare durante l'accesso.
# Inserito dall'utente (proveniente dall'app di autenticazione)
otp_input = input("Inserisci il codice OTP: ")
# Verifica l'OTP
if totp.verify(otp_input):
print("Codice corretto. Accesso consentito.")
else:
print("Codice errato. Accesso negato.")
Considerazioni finali
Questa implementazione è una base utile per aggiungere il 2FA alle tue applicazioni Python, in particolare nelle app web o CLI. In un'applicazione reale, dovresti memorizzare il secret 2FA in modo sicuro e verificare il codice durante il processo di autenticazione dell'utente.