Come può aiutare un token di aggiornamento? [duplicare]

20

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ì:

  1. L'utente apre l'app e fornisce le sue credenziali di accesso.
  2. App effettua una richiesta POST al server e il server emette un token di accesso (token casuale, non accessibile) all'app.
  3. 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.
  4. 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.
  5. 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).
  6. 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.

    
posta qre0ct 10.02.2016 - 07:39
fonte

1 risposta

16

Il vantaggio principale di un token di aggiornamento è che è più facile rilevare se è compromesso.

Considera questi due scenari:

  1. Viene utilizzato un singolo token di autenticazione a lunga durata.
  2. Viene utilizzato un token di autenticazione di breve durata e un token di aggiornamento di lunga durata richiede periodicamente un nuovo token di autenticazione una volta scaduto il precedente.

Nello scenario 1, se il token di autenticazione è compromesso, sarebbe difficile per chiunque rilevarlo e l'accesso non autorizzato potrebbe continuare indefinitamente.

Nello scenario 2, se solo il token di autenticazione è compromesso (anche il token di aggiornamento non è compromesso), potrebbe continuare solo fino alla scadenza del token.

Nello scenario 2, se il token di aggiornamento viene compromesso, una volta richiamato il token di aggiornamento, tutti gli altri token di autenticazione generati utilizzando quel token di aggiornamento vengono invalidati, quindi solo 1 parte può utilizzare l'API (per token di aggiornamento) in un tempo. Ciò si traduce in più utenti che invalidano ripetutamente i token di autenticazione reciproci generandone di nuovi. L'API potrebbe rilevare la violazione perché gli aggiornamenti vengono eseguiti prima della scadenza del token di autenticazione e saprebbe immediatamente revocare il token di aggiornamento.

    
risposta data 10.02.2016 - 18:36
fonte

Leggi altre domande sui tag