Sto ancora cercando di trovare la migliore soluzione di sicurezza per proteggere l'API REST, perché la quantità di applicazioni mobili e API aumenta ogni giorno.
Ho provato diversi modi di autenticazione, ma ho ancora alcuni malintesi, quindi ho bisogno di consigli di qualcuno più esperto.
Lasciami dire, come capisco tutto questo. Se capisco qualcosa in modo errato, per favore fatemelo sapere.
Per quanto riguarda le API REST non stateless e WEB in generale, è necessario inviare alcuni dati di autenticazione in ogni richiesta (cookie, token ....). Conosco tre meccanismi ampiamente utilizzati per autenticare l'utente
-
Token con HTTPS. Ho usato questo approccio un sacco di volte è abbastanza buono con HTTPS. Se l'utente fornisce la password e il login corretti, riceverà il token in risposta e lo userà per ulteriori richieste. Il token è generato dal server e memorizzato, ad esempio nella tabella separata o uguale dove sono archiviate le informazioni dell'utente. Quindi per ogni richiesta il server controlla se l'utente ha token ed è lo stesso del database. Tutto è abbastanza semplice.
-
Token JWT. Questo token è auto-descrittivo, contiene tutte le informazioni necessarie sul token stesso, l'utente non può cambiare ad esempio la data di scadenza o qualsiasi altro reclamo, poiché questo token è generato (firmato) dal server con una parola chiave segreta. Questo è anche chiaro. Ma un grosso problema, personalmente per me, come invalidare il token.
-
OAuth 2. Non capisco perché questo approccio debba essere usato quando la comunicazione viene stabilita direttamente tra server e client. Per quanto ho capito, il server OAuth viene utilizzato per emettere token con ambito limitato per consentire ad altre applicazioni di accedere alle informazioni dell'utente senza memorizzare password e login. Questa è un'ottima soluzione per i social network, quando l'utente vuole iscriversi su qualche pagina, il server può richiedere le autorizzazioni per ottenere informazioni sugli utenti, ad esempio da Twitter o Facebook, e riempire i campi di registrazione con i dati dell'utente e così via.
Considera il client mobile per il negozio online.
Prima domanda dovrei preferire JWT al primo token di tipo? Per quanto ho bisogno di login / logout utente su client mobile, ho bisogno di memorizzare qualche token o in caso di JWT, il token dovrebbe essere invalidato al logout. Diversi approcci sono utilizzati per invalidare il token uno dei è quello di creare un elenco di token non valido (lista nera). Hmm. Tabella / file avrà dimensioni molto più grandi di se il token è stato memorizzato nella tabella e associato all'utente, e appena rimosso al logout.
Quindi quali sono i vantaggi del token JWT?
Seconda domanda su OAuth, dovrei usarla in caso di comunicazione diretta con il mio server? Qual è lo scopo di un ulteriore livello tra client e server solo per emettere un token, ma la comunicazione non avverrà con il server oauth ma con il server principale. Come ho capito, il server OAuth è responsabile solo delle autorizzazioni di app di terze parti (token) per accedere alle informazioni private dell'utente. Ma la mia applicazione client mobile non è di terze parti.