Ciao Sto creando un'applicazione mobile nativa che utilizza endpoint REST API per comunicare con il lato server. Ho avuto esperienze precedenti nello sviluppo di client nativi, ma ho un token semplice (stringa generata casualmente) memorizzato nel DB nella stessa tabella in cui sono archiviate le informazioni dell'utente. Quindi è come le sessioni usate nel browser, ma invece dei cookie ogni richiesta ha un token nell'intestazione.
Recentemente ho scartato il token JWT. Sembra essere un ottimo modo per proteggere endpoint privati. Puoi richiedere il token dal client mobile fornendo pass + login e ricevi token generati in risposta. Ma l'unica cosa importante è che questo token non è memorizzato da nessuna parte sul server, il server verifica il token usando la parola segreta, che è privata per il server come la chiave privata. Va bene per gli endpoint protetti, ma cosa fare se richiedo una sessione utente, ad esempio come funzionano le app come Facebook, Amazon, Aliexpress ... hanno la capacità di utilizzare l'app senza fornire credenziali, semplicemente navigando nel negozio, ma richiede l'accesso quando l'utente non vuole effettuare l'acquisto. E dopo quella sessione utente viene tenuta per un po 'di tempo. Questo può essere implementato con il token JWT senza problemi, ma quando l'utente deve disconnettersi, cosa fare in questo caso? Il token non è memorizzato da nessuna parte sul server, quindi come posso distruggere questo token, per renderlo non valido?
Se il token è memorizzato nel database, l'API non è stateless, come dovrebbe essere l'API REST. Quindi in generale non c'è modo di tenere l'utente loggato in API senza stato, ho ragione?
Ho alcune idee su come implementarlo usando il token JWT, ma ancora una volta questa non sarà API stateless, come ho capito.
- Crea l'elenco dei token scaduti
- Conserva il token JWT nel database, ma qual è lo scopo del token auto descrittivo (JWT) in questo caso se è archiviato nel database, l'idea principale del token JWT di conservare tutte le informazioni con il token, come so.
Per favore suggerisci quale sarà il modo migliore in questo caso e correggimi se ho sbagliato. Grazie.