Domanda

devo confessare ho avuto questo problema per un tempo molto lungo, non è mai veramente capire.

dire token di autenticazione è come una chiave di una cassetta di sicurezza, quando scade non è più utilizzabile.ora avremo una magia refresh token, che può essere utilizzato per ottenere un altro utilizzabile chiave, e un altro...fino a quando la magia è scaduta.così perché non basta impostare la scadenza del token di autenticazione come lo stesso refresh token?perché da fastidio a tutti?

qual è il motivo valido per farlo, forse quello storico?voglio davvero sapere.grazie

È stato utile?

Soluzione

La risposta di riferimento (tramite @anders) è utile, indica:

.

In caso di compromesso, la finestra del tempo è valida per è limitata, ma I token vengono utilizzati su SSL, così improbabili che siano compromessi.

Penso che la parte importante sia che i token di accesso vengano spesso registrati (specialmente se usati come parametro di query, che è utile per JSONP), quindi è meglio per loro essere di breve durata.

Ci sono alcuni motivi aggiuntivi, con implementazioni su larga scala di fornitori di servizi OAuth 2.0 da

    .
  1. I server API possono convalidare in modo sicuro i token di accesso senza ricerche DB o chiamate RPC se va bene non preoccuparti della revoca. Ciò può avere forti vantaggi performanti e complessità diminuisce per i server API. Meglio se stai bene con una revoca del token prendendo 30 m-60m (o qualunque sia la lunghezza del token di accesso). Naturalmente, i server API potrebbero anche mantenere un elenco di token in memoria revocato anche nell'ultima ora.

  2. Poiché i token possono avere più ambiti con accesso a più diversi servizi API, con i gettoni di accesso di breve durata impediscono uno sviluppatore di un servizio API per ottenere un accesso per tutta la vita ai dati di un utente sul servizio API B. compartimentazione è buono per sicurezza.

Altri suggerimenti

Stavo leggendo un Articolo L'altro giorno di Tiseer Joudeh e lo trovo molto utile ha detto:

A mio parere ci sono tre principali vantaggi per utilizzare i token di aggiornamento che sono:

    .
  1. Aggiornamento del contenuto del token di accesso: Come sapete che i token di accesso sono token autonomi, contengono tutte le rivendicazioni (informazioni) sull'utente autenticato una volta generate, ora se rilasciamo un token di lunga durata (1 mese Ad esempio) per un utente denominato "Alex" e l'ha iscritto in ruolo "Utenti", quindi queste informazioni vengono contenute sul token che ha generato il server di autorizzazione. Se hai deciso in seguito (2 giorni dopo aver ottenuto il token) per aggiungerlo al ruolo "admin", allora non c'è modo di aggiornare queste informazioni contenute nel token generato, è necessario chiedergli di autenticarlo di nuovo Quindi il server di autorizzazione aggiunge queste informazioni a questo token di accesso di nuova generazione, e questo non è possibile sulla maggior parte dei casi. Potresti non essere in grado di raggiungere gli utenti che hanno ottenuto i token di accesso a lungo vivo. Per superare questo problema, dobbiamo emettere token di accesso a breve durata (per esempio 30 minuti) e utilizzare il token di aggiornamento per ottenere un nuovo token di accesso, una volta ottenuto il nuovo token di accesso, il server di autorizzazione sarà in grado di aggiungere una nuova richiesta per l'utente "Alex" che gli assegna al ruolo "admin" una volta generato il nuovo token di accesso

  2. Revoca dell'accesso da utenti autenticati: una volta che l'utente ottiene il token di accesso a lungo vissuto, sarà in grado di accedere alle risorse del server purché il suo token di accesso non sia scaduto, non vi è un modo standard per revocare i token di accesso a meno che Il server di autorizzazione implementa la logica personalizzata che ti costringe a memorizzare il token di accesso generato nel database e fare assegni del database con ciascuna richiesta. Ma con i token di aggiornamento, un amministratore di sistema può revocare l'accesso eliminando semplicemente l'identificatore di aggiornamento del token dal database quindi una volta che il sistema richiede un nuovo token di accesso utilizzando il token di aggiornamento cancellato, il server di autorizzazione rifiuterà questa richiesta perché il token di aggiornamento non è più disponibile (Verremo in questo con più dettagli).

  3. Non è necessario memorizzare o chiedere Nome utente e password: Utilizzando Aggiorna token consente di chiedere all'utente il suo nome utente e la password solo una volta che autentica per la prima volta, il server di autorizzazione può emettere molto tempo Aggiorna il token (1 anno per esempio) e l'utente rimarrà loggato in tutto questo periodo a meno che il sistema di sistema tenga a revocare il token di aggiornamento. Puoi pensare a questo come un modo per eseguire l'accesso offline alle risorse del server, questo può essere utile se si sta costruendo un'API che verrà consumata dall'applicazione frontale in cui non è fattibile continuare a chiedere frequentemente nome utente / password.

Vorrei aggiungere a questo un altro punto di vista.

Autenticazione senza stato, senza colpire il DB su ogni richiesta

Supponiamo che si desidera creare un apolide (nessuna sessione) meccanismo di sicurezza che può fare l'autenticazione di milioni di utenti, senza dover effettuare una chiamata al database per effettuare l'autenticazione.Con tutto il traffico che la vostra applicazione è di ottenere, per il salvataggio di un DB di chiamata su ogni richiesta vale un sacco!E ha bisogno di essere apolide, in modo da essere facilmente cluster e di scalare fino a centinaia o addirittura migliaia di server.

Con il vecchio stile sessioni, l'utente accede, al punto che leggiamo i loro info utente dal database.Per evitare di dover leggere ancora e ancora conserviamo in una sessione (di solito in memoria o alcuni cluster di cache).Si invia l'ID di sessione per il cliente in un cookie, che è collegato a tutte le richieste successive.Per le richieste successive, possiamo utilizzare l'ID di sessione per la ricerca di sessione, che a sua volta contiene le informazioni di utente.

Mettere info utente direttamente nel token di accesso

Ma non vogliamo sessioni.Così, invece di memorizzare le informazioni utente nella sessione, basta metterlo in un token di accesso.Abbiamo firmato il token in modo che nessuno può alterare con e presto.Siamo in grado di autenticare le richieste senza una sessione e senza dover cercare info utente dal DB per ogni richiesta.

Nessuna sessione ...alcun modo per vietare gli utenti?

Ma non avendo una sessione è un grande svantaggio.Che cosa succede se questo utente è stato bannato per esempio?Nel vecchio scenario che solo rimuovere la sua sessione.Ha poi nuovamente il login, che ha vinto ' t essere in grado di fare.Divieto completato.Ma nel nuovo scenario non c'è sessione.Quindi, come possiamo divieto lui?Ci sarebbe da chiedere a lui (molto educatamente) a rimuovere il token di accesso.Controllare ogni richiesta in arrivo contro un divieto?Sì, potrebbe funzionare, ma ora ci sono di nuovo a fare quel DB chiamata non vogliamo.

Il compromesso di breve durata gettoni

Se pensiamo che non è accettabile che un utente potrebbe ancora essere in grado di usare il suo account per, diciamo, 10 minuti dopo essere stato bannato, siamo in grado di creare una situazione che è frutto di un compromesso tra controllo del DB ogni richiesta e solo su login.Ed è qui che il refresh token sono disponibili in.Essi ci permettono di utilizzare un apolide meccanismo di breve durata token di accesso.Non siamo in grado di revocare questi token come nessun database di controllo è fatto per loro.Abbiamo solo controllare la loro data di scadenza contro il tempo corrente.Ma una volta che scade, l'utente dovrà fornire il refresh token per ottenere un nuovo token di accesso.A questo punto facciamo controllare il DB e vedere che l'utente è stato bannato.Così si nega la richiesta di un token di accesso e il divieto ha effetto.

Pantaloncini possibili Risposta:

Aggiorna i token consentono tempi di decadimento ambito / diverso dei token. I token risorse effettivi sono brevi vissuti, mentre il token di aggiornamento può rimanere valido per anni (app mobili).Questo viene fornito con una migliore sicurezza (i token delle risorse non devono essere protetti) e prestazioni (solo l'API di aggiornamento del token deve controllare la validità contro DB).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top