2015-08-23 16 views
10

Vorrei sapere se quello che ho fatto finora è un modo valido per autenticare/rinnovare il token e se ci sono difetti o vulnerabilità di cui dovrei essere a conoscenza come ho provato a limitare l'interazione del database a zero. Ecco qui.Angularjs e slim framework autenticazione JWT e token refresh flow

  1. L'utente viene autenticato tramite normale nome utente/password o via Facebook
  2. Il backend PHP genera un token con una scadenza di 30 minuti e lo invia al client angularjs
  3. Il token JWT viene memorizzato in $ localStorage
  4. il token JWT viene iniettato, con l'aiuto di un intercettatore, in ogni intestazione di richiesta
  5. Tutti i percorsi sottili che richiedono autenticazione controllare il token inviato con l'aiuto di un middleware.
  6. Se il token non è valido (scaduto, è stato manomesso, non è adatto a quel particolare ruolo), Slim risponderà con un errore 401/403.
  7. Un servizio angolare controlla ogni minuto se il token sta per scadere
  8. Se il token sta per scadere (da 5 a 1 minuti rimanenti), il servizio invia il vecchio token a un altro endpoint dell'API.
  9. L'endpoint API verifica la validità del token e risponde con uno nuovo con una scadenza di +30 minuti.
  10. Il servizio di polling che ho menzionato prima sostituisce il vecchio token in $ localStorage.
  11. Risciacquare e ripetere.

NB: SSL sarà attuato nella produzione

Bounty assegnato a @Valdas come lui era l'unico che in realtà ha risposto

+1

C'è un buon articolo su dove memorizzare il JWT. https://stormpath.com/blog/where-to-store-your-jwts-cookies-vs-html5-web-storage/ –

+0

@MikaTuupola Grazie per il suggerimento. Conserverò il token in un cookie per una maggiore protezione. Ho già implementato il meccanismo anti-CSRF menzionato qui e ho dato uno sguardo al tuo middleware slim-jwt-auth. Bel lavoro! Ho fatto il mio middleware di base, ma il tuo è decisamente all'altezza. Devi provarlo. Il problema cookie/localStorage è l'unica cosa che sembra _credire_ con la mia logica? –

risposta

4

Non v'è alcuna necessità di loop di scadenza del token controllo. Io uso https://github.com/auth0/angular-jwt come una libreria per i miei progetti Angular, che fornisce un modo per aggiornare il token poco prima che venga lanciata la richiesta HTTP, semplificando il meccanismo di autenticazione.

Inoltre, è possibile rimuovere il token dalla richiesta se il suo caricamento di un modello (termina con .html), ma questa è solo una preferenza personale.

+0

Grazie a @Valdas ma il ciclo ha uno scopo: non lascia scadere il token mentre il browser è aperto, anche se non ci sono attività o richieste dell'utente. Come per tutti i servizi che fornisce la libreria angular-jwt, probabilmente lo userò nei miei prossimi progetti. –