Come convalidare le informazioni sul server senza utilizzare il database o la sessione

1

Ogni utente ha più siti a cui possono accedere i dati dei rapporti in un'applicazione a cui sto lavorando. Per evitare di dover accedere al database per ogni singola richiesta, convalido che hanno accesso al sito solo quando cambiano i siti e quindi memorizzo l'id del sito corrente nella sessione.

Sto cercando di eliminare lo stato della sessione in modo che le mie richieste asincrone asincrone non siano sincronizzate e anche in modo che l'utente possa avere un sito diverso aperto su ogni scheda del browser. Inoltre, non voglio tornare a chiamare il database ad ogni richiesta per convalidare che l'utente abbia accesso al sito specificato facendo una richiesta. Ho visto implementazioni in cui le persone crittografano l'id sul client, ma non è sicuro che cosa impedirebbe a terzi di guardare oltre la spalla di qualcuno (vedendo forse l'id sulla stringa di query) quindi utilizzare lo stesso id con il proprio login per fare una richiesta.

Ho due idee:

1) Criptare l'id con il nome utente autenticato delle persone come seme ... Quindi crittografarlo di nuovo con una chiave privata. Quando arriva la richiesta, decrypt con la chiave privata, quindi provo a decodificare con il nome utente corrente e recuperare l'ID. O forse dovrei combinare il nome utente con l'id come [email protected]_ [SITEID], quindi criptarlo con la chiave privata e dividerlo per vedere se il nome utente corrente corrisponde alla prima parte. Il problema con questo però è che non scade mai davvero, quindi potrebbero in futuro fare una richiesta anche se hanno perso l'accesso purché abbiano l'id in giro.

2) Simile all'idea 1, ma potrei usare l'id della sessione con la crittografia come una terza chiave, forse. Il problema però è che se la sessione scade e lascia una scheda aperta, tutte le richieste non funzionerebbero dalla scheda che è stata lasciata aperta anche se una sessione è attiva.

3) Utilizza una cache in modo che le richieste asincrone non siano influenzate e memorizzi solo le chiavi come [email protected]_ [VALIDATED_SITE_ID], quindi verifica se la chiave esiste quando arriva la richiesta e in caso contrario, premi il database per stabilire la convalida chiave.

Qualcuno ha indirizzato questo tipo di scenario in cui è necessario convalidare l'utente può fare un tipo specifico di richiesta, ma lo fai senza sessione o colpendo il database ogni volta che viene fatta una richiesta?

    
posta KingOfHypocrites 02.08.2014 - 14:09
fonte

0 risposte

Leggi altre domande sui tag