Skip to Content

Sessioni & Rotazione Token

Quando un utente accede a un’applicazione basata su Auris, il sistema crea una sessione. Questa sessione è il record autorevole dello stato autenticato dell’utente. Capire come funzionano le sessioni, come i token ruotano e come Auris rileva il furto di token è essenziale per costruire applicazioni sicure.

Cos’è una Sessione in Auris?

Una sessione in Auris è un record lato server archiviato nel database (tramite Prisma), non un cookie o token lato client. Ogni sessione contiene:

CampoDescrizione
idIdentificatore univoco della sessione
userIdL’utente autenticato
sessionTokenToken opaco archiviato in un cookie httpOnly sul client
accessTokenIl token di accesso (JWT) emesso più di recente
refreshTokenIl refresh token (stringa opaca) emesso più di recente
tokenFamilyIdentificatore che collega tutti i refresh token nella catena di rotazione di questa sessione
createdAtQuando la sessione è stata creata (usato per la scadenza assoluta)
lastActiveAtQuando la sessione è stata usata l’ultima volta (usato per la scadenza sliding)
expiresAtQuando la sessione scade
ipAddressIndirizzo IP dal login originale
userAgentIdentificatore browser/dispositivo dal login originale
acrAuthentication Context Class Reference (il livello di forza dell’autenticazione)
amrAuthentication Methods Reference (quali fattori sono stati usati: password, otp, webauthn)

La distinzione chiave: le sessioni Auris sono server-authoritative. Il server sa sempre quali sessioni esistono, quali sono attive e può revocare qualsiasi sessione istantaneamente. Non si fa affidamento solo sulla scadenza del token per la terminazione della sessione.

Ciclo di Vita della Sessione

Creazione della Sessione

Quando l’autenticazione ha successo (dopo tutti i fattori inclusi MFA, controlli di rischio adattivi e hook dell’Actions Engine), Auris:

  1. Crea un record OAuthSession nel database
  2. Genera un sessionToken casuale e lo imposta come cookie httpOnly (TTL 30 minuti, rinnovato ad ogni uso)
  3. Emette un token di accesso (JWT firmato) con i claim dell’utente, i ruoli e i custom claim
  4. Emette un refresh token (stringa opaca con prefisso rt_)
  5. Assegna un identificatore tokenFamily che collega tutti i futuri refresh token in questa sessione

Uso Attivo

Durante la durata attiva della sessione, il client invia il token di accesso su ogni richiesta API. Il resource server valida la firma JWT localmente (tramite JWKS) senza contattare Auris. Non avviene alcuna lookup nel database per la validazione del token di accesso, il che mantiene bassa la latenza.

Refresh

Quando il token di accesso scade, il client invia il refresh token all’endpoint token. Auris:

  1. Cerca il refresh token nel database
  2. Valida che non sia già stato usato (controllo rotazione)
  3. Valida che la sessione non sia scaduta (controllo assoluto e sliding)
  4. Invalida il vecchio refresh token (lo contrassegna come usato)
  5. Emette un nuovo token di accesso e un nuovo refresh token
  6. Aggiorna lastActiveAt sulla sessione (azzera la finestra sliding)

Terminazione

Le sessioni terminano attraverso diversi meccanismi:

MeccanismoQuando AccadeEffetto
Logout esplicitoL’utente clicca “Disconnetti”Sessione eliminata, tutti i token per questa sessione invalidati
Scadenza slidingNessun refresh entro la finestra di inattivitàLa sessione scade
Scadenza assolutaLa sessione è viva da più del massimo assolutoLa sessione scade indipendentemente dall’attività
Revoca adminL’admin revoca la sessione dalla ConsoleSessione eliminata immediatamente
Rilevamento riutilizzoViene presentato un refresh token già usatoIntera famiglia di token revocata
Azione accountUtente disabilitato, eliminato o password cambiataTutte le sessioni per l’utente vengono revocate

Rotazione del Refresh Token

La rotazione del refresh token è un meccanismo di sicurezza in cui ogni refresh di token riuscito invalida il vecchio refresh token e ne emette uno nuovo. Auris implementa la rotazione di default senza possibilità di disabilitarla.

Perché Ruotare?

Senza rotazione, un refresh token rubato rimane valido fino alla sua scadenza naturale (7 giorni per default). L’attaccante può usarlo per ottenere nuovi token di accesso indefinitamente in quella finestra, anche se l’utente legittimo continua a usare l’applicazione.

Con la rotazione, un refresh token rubato può essere usato solo una volta. Se l’utente legittimo fa il refresh prima (che è il caso comune), il token rubato diventa non valido. Se l’attaccante fa il refresh prima, il successivo tentativo di refresh dell’utente legittimo attiva il rilevamento del riutilizzo.

Famiglie di Token

Ogni refresh token in Auris è associato a un tokenFamily — un identificatore che collega tutti i refresh token in una singola catena di sessione. Quando viene rilevato il riutilizzo di un refresh token:

  1. Auris controlla quale sessione è proprietaria del token riutilizzato
  2. Identifica la famiglia di token per quella sessione
  3. Revoca tutti i token in quella famiglia (l’intera sessione)
  4. La revoca impedisce all’attaccante di usare qualsiasi token precedente nella catena

Scadenza Assoluta vs. Sliding

Auris applica due tipi di scadenza a ogni sessione:

Scadenza Assoluta: La sessione scade dopo un massimo assoluto (default: 24 ore) dalla sua creazione, indipendentemente dall’attività.

Scadenza Sliding (Inattività): La sessione scade dopo un periodo di inattività (default: 1 ora). Ogni volta che viene effettuato un refresh, la finestra sliding si azzera.

La sessione scade quando si raggiunge la prima delle due condizioni. Questo bilanciamento garantisce che:

  • Gli utenti attivi rimangono connessi senza dover ri-autenticarsi frequentemente
  • Le sessioni abbandonate (nessuna attività) scadono in modo tempestivo
  • Esiste una garanzia temporale assoluta per la sicurezza

Sessioni Multi-Dispositivo

Ogni login da un dispositivo diverso crea una sessione separata. Per default, Auris consente fino a 5 sessioni concorrenti per utente.

Quando viene raggiunto il limite, il login da un nuovo dispositivo revoca la sessione attiva più vecchia.

Viewing Active Sessions

Gli utenti possono visualizzare e gestire le proprie sessioni attive tramite la tua applicazione usando le API di gestione delle sessioni. Il campo userAgent consente di mostrare “iPhone” o “Chrome su Windows” per aiutare gli utenti a identificare le sessioni non riconosciute.

Concetti Correlati