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 dei malintesi, quindi ho bisogno del consiglio di qualcuno più esperto.
Lasciami dire, come capisco tutte queste cose. Se capisco qualcosa in modo errato, per favore fatemi sapere.
Per quanto l'API REST sia apolide e WEB in generale, è necessario inviare alcuni dati di autenticazione in ciascuna richiesta (cookie, token ....). Conosco tre meccanismi ampiamente utilizzati per autenticare l'utente
Token con HTTPS. Ho usato questo approccio molte volte, è abbastanza buono con HTTPS. Se l'utente fornisce la password e l'accesso corretti, riceverà il token in risposta e lo utilizzerà per le ulteriori richieste. Il token viene generato dal server e memorizzato, ad esempio nella tabella separata o lo stesso in cui sono archiviate le informazioni dell'utente. Pertanto, per ogni server di richieste controlla se l'utente ha un 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ò modificare, ad esempio, la data di scadenza o qualsiasi altro reclamo, poiché questo token è generato (firmato) dal server con una parola chiave segreta. Anche questo è 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. A 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 desidera registrarsi su alcune pagine, il server può richiedere autorizzazioni per ottenere informazioni sugli utenti, ad esempio da Twitter o Facebook, e riempire i campi di registrazione con i dati degli utenti e così via.
Prendi in considerazione il client mobile per il negozio online.
Prima domanda dovrei preferire JWT rispetto al token di primo tipo? Per quanto riguarda l'utente di accesso / disconnessione sul client mobile, devo archiviare un token da qualche parte o in caso di JWT, il token deve essere invalidato al momento della disconnessione. Approcci diversi sono utilizzati per invalidare il token, uno dei è quello di creare un elenco di token non valido (lista nera). Hmm. La tabella / file avrà dimensioni molto maggiori rispetto a se il token fosse archiviato nella tabella e associato all'utente e appena rimosso al logout.
Quindi quali sono i vantaggi del token JWT?
Seconda domanda su OAuth, dovrei usarlo in caso di comunicazione diretta con il mio server? Qual è lo scopo di un ulteriore livello tra client e server solo per emettere token, ma la comunicazione non avverrà con il server oauth ma con il server principale. A quanto ho capito, il server OAuth è responsabile solo di concedere autorizzazioni (token) per app di terze parti per accedere alle informazioni private dell'utente. Ma la mia applicazione client mobile non è di terze parti.