Sto creando un'API web e ho difficoltà a scegliere tra token di sessione crittografico e token di sessione casuale memorizzato per l'autenticazione dell'utente.
Vedo diversi pro e amp; contro per ciascuno:
-
token sessione casuale memorizzato (memorizza una coppia in scadenza {token: userId} in un db):
- veramente casuale, con un rischio di collisione trascurabile; un ulteriore controllo univoco può essere eseguito durante l'inserimento del database
- memorizzati in un database, il che porta a ridimensionare i costi, a ridurre i costi di manutenzione I token
- possono essere revocati
- nessun rischio di crittanalisi a condizione che venga utilizzata la funzione casuale corretta
-
token di sessione crittografico (usa un mix strongmente crittografato di "userId, expiryTime" con una chiave simmetrica comune memorizzata nel back-end)
- random ad ogni sessione, grazie al tempo di scadenza e amp; un nonce
- non è necessario memorizzarli (non è necessario effettuare chiamate di rete aggiuntive): la decodifica simmetrica del token di sessione sarà più veloce. Questo porta a un massiccio miglioramento dei costi e al loro devoto I token
- non possono essere revocati
- rischio di crittanalisi
- rischio di collisione trascurabile ma esistente che non può essere prevenuto
- rischio con la chiave master simmetrica
L'approccio più sicuro sembra il token di sessione casuale memorizzato, tuttavia i costi e l'amp; le questioni relative ai database di Devops mi stanno davvero facendo dubitare.
Qualsiasi aiuto sulle migliori pratiche e se il token di sessione crittografica sarebbe considerato a prova di proiettile dagli esperti di sicurezza? Forse un suggerimento di una soluzione più strong?
Il collegamento fornito riconosce ancora che entrambi vengono utilizzati - Mi chiedo se un esperto di sicurezza rifiuterà il token crittografico per un sito Web bancario? Dove disegna la linea?