Vai al contenuto principale

[Lv1] Quali Sono le Differenze tra Autenticazione Basata su Session e su Token?

Una domanda di follow-up comune nei colloqui: Conosci le differenze tra Session tradizionale e Token moderno? Padroneggia i seguenti punti chiave per organizzare rapidamente le tue idee.


1. Concetti Fondamentali dei Due Modelli di Autenticazione

Autenticazione Basata su Session

  • Lo stato è memorizzato sul server: Dopo il primo login dell'utente, il server crea una Session in memoria o in un database e restituisce un Session ID memorizzato in un Cookie.
  • Le richieste successive si basano sul Session ID: Il browser invia automaticamente il Session Cookie per lo stesso dominio, e il server cerca le informazioni utente corrispondenti tramite il Session ID.
  • Comune nelle applicazioni MVC tradizionali / monolitiche: Il server è responsabile del rendering delle pagine e del mantenimento dello stato utente.

Autenticazione Basata su Token (es. JWT)

  • Lo stato è memorizzato sul client: Dopo un login riuscito, viene generato un Token (che può contenere informazioni utente e permessi) e memorizzato dal frontend.
  • Il Token viene inviato con ogni richiesta: Tipicamente inserito in Authorization: Bearer <token>. Il server verifica la firma per recuperare le informazioni utente.
  • Comune in SPA / microservizi: Il backend deve solo verificare il Token senza memorizzare lo stato utente.

2. Confronto del Flusso di Richiesta

PassoBasata su SessionBasata su Token (JWT)
Login riuscitoIl server crea la Session, restituisce Set-Cookie: session_id=...Il server emette il Token, restituisce JSON: { access_token, expires_in, ... }
ArchiviazioneCookie del browser (di solito httpOnly)Scelta del frontend: localStorage, sessionStorage, Cookie, Memory
Richieste successiveIl browser invia automaticamente il Cookie; il server cerca le info utenteIl frontend aggiunge manualmente l'header Authorization
VerificaInterrogazione del Session StoreVerifica della firma del Token, o controllo blacklist/whitelist
LogoutElimina la Session sul server; restituisce Set-Cookie per cancellare il CookieIl frontend elimina il Token; l'invalidazione forzata richiede blacklist o rotazione delle chiavi

3. Riepilogo Pro e Contro

AspettoBasata su SessionBasata su Token (JWT)
Pro- Il Cookie viene inviato automaticamente, semplice lato browser
- La Session può memorizzare grandi quantità di dati
- Facile revocare e forzare il logout
- Stateless, scalabile orizzontalmente
- Adatto per SPA, mobile, microservizi
- Il Token funziona cross-domain e cross-device
Contro- Il server deve mantenere il Session Store, consumando memoria
- I deployment distribuiti richiedono la sincronizzazione delle Session
- Il Token è più grande, trasmesso con ogni richiesta
- Non può essere facilmente revocato; richiede meccanismi di blacklist/rotazione delle chiavi
Rischi di Sicurezza- Vulnerabile ad attacchi CSRF (il Cookie viene inviato automaticamente)
- Se il Session ID viene trapelato, deve essere cancellato immediatamente
- Vulnerabile a XSS (se memorizzato in una posizione leggibile)
- Se il Token viene rubato prima della scadenza, le richieste possono essere replicate
Casi d'Uso- Web tradizionale (SSR) + stesso dominio
- Pagine renderizzate dal server
- RESTful API / GraphQL
- App mobile, SPA, microservizi

4. Come Scegliere?

Poniti Tre Domande

  1. Hai bisogno di condividere lo stato di login cross-domain o multi-piattaforma?

    • Sì → Il Token è più flessibile.
    • No → La Session è più semplice.
  2. Il deployment è multi-server o microservizi?

    • Sì → Il Token riduce la necessità di replicazione o centralizzazione delle Session.
    • No → La Session è facile e sicura.
  3. Ci sono requisiti di sicurezza elevati (banche, sistemi aziendali)?

    • Requisiti più alti → Session + httpOnly Cookie + protezione CSRF resta la scelta principale.
    • API leggere o servizi mobile → Token + HTTPS + Refresh Token + strategia di blacklist.

Strategie di Combinazione Comuni

  • Sistemi interni aziendali: Session + sincronizzazione Redis / Database.
  • SPA moderna + App Mobile: Token (Access Token + Refresh Token).
  • Microservizi su larga scala: Token (JWT) con verifica API Gateway.

5. Template di Risposta per il Colloquio

"La Session tradizionale memorizza lo stato sul server e restituisce un session ID in un Cookie. Il browser invia automaticamente il Cookie con ogni richiesta, rendendola adatta per le Web App sullo stesso dominio. Lo svantaggio è che il server deve mantenere un Session Store, e i deployment multi-server richiedono sincronizzazione. Al contrario, il Token (es. JWT) codifica le informazioni utente in un Token memorizzato sul client, e il frontend lo include manualmente nell'Header con ogni richiesta. Questo approccio è stateless, rendendolo adatto per SPA e microservizi, e più facile da scalare. Per quanto riguarda la sicurezza, la Session deve proteggersi da CSRF, mentre il Token deve fare attenzione a XSS. Se ho bisogno di cross-domain, dispositivi mobili o integrazione multi-servizio, sceglierei il Token. Per i sistemi aziendali tradizionali con rendering lato server, sceglierei la Session con httpOnly Cookie."


6. Note sui Follow-up del Colloquio

  • Session → Concentrarsi su protezione CSRF, strategie di sincronizzazione delle Session e frequenza di pulizia.
  • Token → Concentrarsi su posizione di archiviazione (Cookie vs localStorage), meccanismo di Refresh Token e blacklist / rotazione delle chiavi.
  • Si può menzionare l'approccio di compromesso comune nelle aziende: memorizzare il Token in un httpOnly Cookie, che può anche essere abbinato a un CSRF Token.

7. Riferimenti