Flask Modulo 7 – Autenticazione e Sicurezza

🔐 Modulo 7: Autenticazione e Sicurezza

Proteggi la tua applicazione con sistemi di login professionali

📚

MODULO
7 di 8

⏱️

TEMPO
75 minuti

🎯

LIVELLO
Avanzato

⬅️ PRECEDENTE
Modulo 6: Database
📍 SEI QUI
Modulo 7
➡️ PROSSIMO
Modulo 8: Deployment

🎯 Perché l’Autenticazione è Cruciale?

L’autenticazione non è un optional – è fondamentale per:

🛡️

Protezione Dati
Accesso solo agli utenti autorizzati

👤

Personalizzazione
Esperienza utente personalizzata

📊

Tracciamento
Monitoraggio attività utente

⚖️

Conformità
GDPR, privacy laws, sicurezza

💡 Autenticazione vs Autorizzazione

🔐 Autenticazione

“Chi sei?”

  • Verifica identità utente
  • Login/Password
  • 2-Factor Authentication
  • Esempio: Login nel sistema

🔑 Autorizzazione

“Cosa puoi fare?”

  • Controlla permessi
  • Ruoli e privilegi
  • Accesso a risorse
  • Esempio: Solo admin può eliminare utenti

🔄 Flusso di Autenticazione Step-by-Step

🔐 Processo di Login – Cosa Succede Dietro le Quinte

👤 Utente
Invia Credenziali
POST /login
Email + Password

🖥️ Server Flask
Riceve Request
Elabora i dati

🖥️ Flask-SQLAlchemy
Query Database
Cerca utente per email

🗄️ Database
Restituisce Hash
Recupera password_hash

🗄️ Database
Hash Password
$2b$12$N7gdoEgC6r…

🖥️ Flask-Bcrypt
Verifica Hash
check_password_hash()

🖥️ Flask-Login
Crea Sessione
login_user()
Set session cookie

👤 Utente
Login Successo!
Redirect a dashboard
Cookie salvato

📝 Flusso di Registrazione Utente

🆕 Creazione Nuovo Account

👤 Nuovo Utente
Compila Form
Username, Email, Password

🖥️ Flask-WTF
Validazione
Controlla campi
Verifica unicità

🖥️ Bcrypt
Hash Password
generate_password_hash()
Sicurezza massima

🗄️ Database
Salva Utente
INSERT INTO users
Commit transaction

🗄️ Database
Successo!
Utente creato
ID: 12345

👤 Utente
Account Creato
Redirect a /login
Flash message

🔑 Hashing delle Password con Bcrypt

MAI memorizzare password in chiaro! Usa sempre hashing.

Password originale: “miaPassword123”
Hash bcrypt: “$2b$12$N7gdoEgC6r6e5GZ5YzJkXeWkZQ2rS5tY8cL9aBvC3dE4fG5hJ6kL7mN8oP9q”

1
Installa Flask-Bcrypt

Terminale
pip install flask-bcrypt

2
Configura Bcrypt

📄 app.py – Configurazione
from flask import Flask
from flask_bcrypt import Bcrypt
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SECRET_KEY'] = 'tua-chiave-segreta-molto-complessa'

# Inizializza Bcrypt
bcrypt = Bcrypt(app)

# Inizializza Database
db = SQLAlchemy(app)

3
Modello Utente con Password Hash

📄 models.py
from app import db, bcrypt
from datetime import datetime

class User(db.Model):
    __tablename__ = 'users'
    
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True, nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)
    # ⚠️ NON memorizzare password in chiaro!
    password_hash = db.Column(db.String(128), nullable=False)
    created_at = db.Column(db.DateTime, default=datetime.utcnow)
    is_active = db.Column(db.Boolean, default=True)
    is_admin = db.Column(db.Boolean, default=False)
    
    # Property per gestire la password
    @property
    def password(self):
        raise AttributeError('password non è un attributo leggibile')
    
    @password.setter
    def password(self, password):
        # Hash della password prima di salvarla
        self.password_hash = bcrypt.generate_password_hash(password).decode('utf-8')
    
    def check_password(self, password):
        # Verifica se la password corrisponde all'hash
        return bcrypt.check_password_hash(self.password_hash, password)
    
    def __repr__(self):
        return f'<User {self.username}>'

✅ COME FARE

# Registrazione utente
new_user = User(
    username='mario',
    email='mario@email.com'
)
new_user.password = 'PasswordSicura123'  # Auto-hash
db.session.add(new_user)
db.session.commit()

❌ COSA NON FARE

# ❌ SBAGLIATO!
new_user = User(
    username='mario',
    email='mario@email.com',
    password_hash='PasswordInChiaro123'  # 😱
)

✅ Modulo 7 Completato!

Ora sai proteggere la tua applicazione con sistemi di autenticazione professionali. Pronto per mettere online la tua app?

ORA SEI QUI
🔐 Modulo 7
Autenticazione

🎯 Cosa Aspettarti nell’Ultimo Modulo

🚀

Deploy su Server

Metti online la tua app Flask

☁️

Hosting Cloud

Heroku, AWS, PythonAnywhere

🔧

Configurazione

Domain, SSL, ambiente produzione

Torna in alto