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:
utente accede al server di autenticazione, dando alcune credenziali (username e password).
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.
Finché il
access token
è valido, il che significa, non è scaduto e contiene dati utili validi, il server risorsa serve all'utente le risorse richieste.Quando il
access token
non è più valido, il server di autenticazione chiede al cliente di fornire unarefresh token
al fine di rilasciare un nuovoaccess 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 nuovoaccess token
al client. - Se lo
refresh token
non riesce un test, il server richiede all'utente di eseguire nuovamente l'autenticazione.
- Il server riceve la
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 ilrefresh token
. Quindi, come posso rendere ilrefresh token
più sicuro? - La mia prospettiva del flusso Oauth2 è corretta?
- Cosa posso migliorare?
- Mi manca qualcosa?
Che tipo di client consumeranno il vostro servizio? – MvdD
@MvdD Direi pubblico. – ElPirru
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