Stavo passando per i documenti di Oauth2 e pensavo che fosse una sorta di sicurezza permissiva, quindi ho provato a implementare token JWT con uno schema speciale come nell'immagine per un'app mobile che comunica con un'API Web.
Note: non mi piaceva l'idea dei token di aggiornamento di Oauth2 in quanto potrebbero essere rubati e consentire l'uso parallelo (da parte di utenti legittimi e malintenzionati) a meno che non si implementa il rilevamento dei furti ruotandoli (aggiornando il token di aggiornamento su ogni richiesta) in questo caso perché usarli del tutto?
Come funziona il flusso di autenticazione:
- Un utente che accede con le credenziali ottiene un jwt di 20 minuti di durata.
- Alla scadenza il jwt viene aggiornato premendo il db controllando se è nella lista nera (relogin) e se non controlla se è stato usato per generare un nuovo token.
- Se non è mai stato utilizzato per l'aggiornamento, viene accettato e utilizzato per rilasciare un token di accesso di basso livello.
- Se il token è stato usato in precedenza, o aveva client + dispositivo + utente diversi da quello genitore offre un controllo delle credenziali (password o codice della schermata di blocco)
- Se superata, questo controllo emette un nuovo token di primo grado che esegue la blacklist di tutti i suoi genitori e figli sul db, è come un nuovo primo accesso utente.
- Se lockscreen fallisce, all'utente viene presentata una schermata di accesso.
Le domande sono:
- Quali sono i possibili buchi di sicurezza? (Ho trovato due casi d'uso: il token di accesso rubato dura 20 minuti lo stesso numero dei token Oauth. Nessun guadagno in questo caso. E token dormiente rubato: l'utente non ha effettuato il login per 7 giorni, il token viene rubato e utilizzato fino a quando l'utente non esegue nuovamente l'accesso o la catena di token rivoltata dopo 3 mesi di persistenza - la nostra politica - e questo furto ha piccole probabilità poiché il token deve essere intercettato all'ultima richiesta fatta dall'utente sull'app, più sottile del furto di un token di aggiornamento Oauth2
- Quali sono i problemi di esperienza utente che un utente malintenzionato può causare nell'app mentre si trova in questo schema?