Ho letto tutto quello che potevo su questo argomento negli ultimi due giorni e non riesco a decidere quale sarebbe l'approccio migliore.
Gli unici due requisiti sono:
-
Ho bisogno di conoscere gli utenti che hanno effettuato l'accesso e ogni sessione che hanno, quindi l'utente sarebbe in grado di vedere un elenco con queste informazioni e di essere in grado di chiudere qualsiasi sessione che scelgono.
-
Entrambe le app dovrebbero utilizzare gli stessi endpoint di un'API di riposo.
All'inizio usavo i cookie di sessione e chiamavo l'API con setCredentials = true, ma ho scoperto che le app mobili gestiscono i cookie in modo diverso e non ne ho il controllo (ad esempio, vengono eliminati per vari motivi prima della scadenza ). Ho pensato di salvare il cookie nello storage nativo e di aggiungerlo ad ogni richiesta, ma non posso accedere al cookie in alcun modo perché httpOnly è impostato su true. La soluzione sarebbe quella di impostare httpOnly su false, ma in questo modo espongo il cookie e non sono sicuro di quali misure di sicurezza dovrei adottare per proteggere il cookie da eventuali furti o manomissioni.
L'altra soluzione sarebbe quella di utilizzare JWT e archiviarlo nella memoria web / nativa. Vorrei anche memorizzare in una tabella ogni token ancora valido (hash con un algoritmo di password) per ottenere l'elenco degli utenti loggati e le loro sessioni, e un'altra tabella per i token non validi per quando l'utente sceglie di terminare una particolare sessione / cambia password / ecc. Ma ancora una volta non sono sicuro delle misure di sicurezza che dovrei fare con questo approccio. Dovrei crittografare anche il token? Stavo pensando di accodare i dati sul dispositivo che richiedono il token per verificare sempre che il dispositivo che ha richiesto il token sia quello che lo utilizza. Quali altre cose dovrei fare per proteggere questo token?
Se implemento correttamente entrambe le opzioni, quale sarebbe più sicuro sia per il Web che per i dispositivi mobili?