Tracciare gli utenti online con un'architettura senza stato

3

Possiedo un'architettura stateless, scambiando un token JWT tra client e server al momento dell'autenticazione.

Voglio memorizzare nel database (una volta al giorno) un timestamp relativo all'accesso dell'utente.
In effetti, vorrei poter mostrare chi stava accedendo all'app, con un margine di 1 giorno (tipo di utenti piuttosto online).

Una buona soluzione ( per evitare di colpire il database ad ogni richiesta del cliente ) ho indovinato sarebbe stato aggiungere una proprietà al token JWT chiamato recentUserAccessTimestamp e inviarla al client ad ogni richiesta.

La domanda è: è una buona pratica far sostituire il client al suo token esistente (in LocalStorage per esempio in caso di WebApp) subito dopo ogni richiesta sul mio server?

    
posta Mik378 28.12.2015 - 19:20
fonte

1 risposta

1

Puoi certamente ruotare il JWT tra le richieste, ma ti imbatterai in un paio di problemi:

  • Quale canale laterale usi per pubblicare il JWT? Un'intestazione di risposta HTTP? Un corpo di risposta aumentata?
  • In che modo un cliente può inviare più di una richiesta simultanea? Il JWT viene ruotato su cicli di richiesta / risposta, quindi riutilizzare un JWT esistente si tradurrà in condizioni di gara funky.

Hai detto che non vuoi aggiornare il DB su ogni richiesta del client. Ma se si ruota il JWT, non si dovrebbe memorizzare comunque il nuovo JWT in Redis o un altro meccanismo di persistenza? Quindi penso che dovresti semplicemente archiviare i dati di accesso degli utenti ad ogni richiesta.

Le persone di marketing fanno banane per il tipo di dati di analisi che acquisirai. Memorizzandolo in massa , potresti semplicemente salvare un collega con un sacco di dolore lungo la linea e ti farà sembrare un eroe.

Un ultimo pensiero. Se è possibile tollerare una perdita dei dati in questione, è sufficiente scriverli in una coda in memoria nell'applicazione principale. Un thread in background può periodicamente scaricare i dati in un archivio di persistenza. Adesso tutti vincono.

    
risposta data 29.12.2015 - 01:51
fonte

Leggi altre domande sui tag