Ho un dubbio di base o apparentemente mi sto perdendo qualcosa di fondamentale. Quando si parla di un'app Android che comunica con il back-end utilizzando le API, l'accesso alle risorse / API viene protetto mediante token di accesso e token di aggiornamento (in modo simile a OAuth 2.0).
Da quanto ho capito, funziona così:
- L'utente apre l'app e fornisce le sue credenziali di accesso.
- App effettua una richiesta POST al server e il server emette un token di accesso (token casuale, non accessibile) all'app.
- L'app memorizza questo token di accesso in modo sicuro sulla memoria locale (sqlite db / preferenze condivise ecc.) e usa questo token con ogni altra chiamata API per far sapere al server che è autorizzato ad accedere alla risorsa.
- Ora questo token di accesso ha anche una scadenza. In modo che anche se il token di accesso viene compromesso, in qualche modo, la finestra di attacco sarebbe piccola.
- Ora, quando ciò accade, richiederebbe all'utente di noleggiare le sue credenziali di accesso e ottenere nuovamente un token di accesso autorizzato, che, almeno nel caso di app mobili, è un'esperienza utente negativa (non accettabile).
- Quindi, per risolvere questo problema, esiste un token di aggiornamento che viene anche pubblicato per l'app insieme al token di accesso in primo luogo. Questo token di aggiornamento è un token speciale molto longevo, che assicura che non appena il token di accesso scade, richiede al server un nuovo token di accesso, eliminando così la necessità per l'utente di reinserire le sue credenziali di accesso per recuperare un nuovo token di accesso autorizzato.
Ora la mia domanda è:
in che modo questo risolve il nostro problema originale di impedire l'accesso non autorizzato alle API? Secondo me, in realtà lo facilita ulteriormente.
Se il token di accesso viene compromesso, è molto probabile che anche il token di aggiornamento venga compromesso allo stesso modo, non è vero? E poiché il token di aggiornamento è un token molto longevo, l'utente malintenzionato sarebbe in grado di utilizzarlo (fino a quando il token di aggiornamento non scade) per continuare a generare nuovi token di accesso autorizzati. È corretto?
Per favore aiutami a capire questo.