2015-10-29 10 views
5

So che ci sono già molti post su Oauth, Oauth2, JWT, ecc. Ho letto molti e ho più confuso che mai, quindi cerco qualche chiarimento. Proporrò la mia opinione sull'argomento e spero che qualcuno possa dirmi se la mia implementazione è abbastanza sicura o cosa sto facendo male e come migliorarla.Capire il flusso di autenticazione con i token di accesso e aggiornamento sull'app nodejs

Sto costruendo un server di API Rest per servire le mie risorse ai miei utenti. Supponiamo che si tratti di un'applicazione bancaria in cui gli utenti possono depositare, prelevare e trasferire denaro.

Sto usando nodejs, hapijs, jsonwebtokens e bcrypt per il mio server. Voglio implementare due flussi di autenticazione token (Oauth2).

Questo è il modo in cui lo faccio:

  1. utente accede al server di autenticazione, dando alcune credenziali (username e password).

  2. Il server verifica le credenziali dell'utente, se sono valide, concede l'accesso all'utente e restituisce un token di aggiornamento e un token di accesso.

    • Questi token vengono salvati nella memoria locale del browser o dispositivo mobile.

    • Il access token:

      • è firmato come jsonwebtoken.
      • contiene la data di emissione, la data di scadenza (5 min), i dati utente (id, nome utente).
    • Il refresh token:

      • è firmato come jsonwebtoken e criptate con bcrypt.
      • contiene un identificatore univoco
      • può contenere una data di scadenza
      • viene salvato nel database.
  3. Finché il access token è valido, il che significa, non è scaduto e contiene dati utili validi, il server risorsa serve all'utente le risorse richieste.

  4. Quando il access token non è più valido, il server di autenticazione chiede al cliente di fornire una refresh token al fine di rilasciare un nuovo access token

    • Il server riceve la refresh token da parte dell'utente, decifra, lo confronta a quello nel database, controlla se è stato revocato e controlla il suo identificatore univoco.
    • Se lo refresh token supera tutti i test, il server invia un nuovo access token al client.
    • Se lo refresh token non riesce un test, il server richiede all'utente di eseguire nuovamente l'autenticazione.

Note: Sto cercando di evitare l'utilizzo di cookie.

Domande:

  • Se l'utente è in grado di rubare un access token, credo che può anche rubare il refresh token. Quindi, come posso rendere il refresh token più sicuro?
  • La mia prospettiva del flusso Oauth2 è corretta?
  • Cosa posso migliorare?
  • Mi manca qualcosa?
+0

Che tipo di client consumeranno il vostro servizio? – MvdD

+0

@MvdD Direi pubblico. – ElPirru

+0

Ho letto un po 'di più sui tipi di client, e devo dire che entrambi i clienti consumeranno il mio servizio, credo. Avrò un'app Web e un'app nativa realizzata con react native; Non so se considerasse nativo o no comunque. Userò https. – ElPirru

risposta

1

La ragione per cui OAuth2 è così confusa per molte persone è perché utilizza flussi di autenticazione diversi a seconda del tipo di client utilizzato.

OAuth2 distingue due client type, confidenziali o pubblici. Accanto a ciò, ci sono 2 flussi di sovvenzioni basati sul reindirizzamento (codice di autenticazione e implicito) che devono essere utilizzati con un browser o un controllo del browser.

Gli altri due flussi (password del proprietario della risorsa e credenziali del client) sono pensati per essere utilizzati da app non-browser (CLI, servizi in background, client mobili fidati).

Ho descritto i diversi flussi e quando utilizzarli in modo più dettagliato in this answer here.

Problemi correlati