Domanda

Sto cercando di implementare una funzionalità di accesso "Ricordati di Me" per un sito ASP.NET MVC che sto costruendo. Sto cercando di utilizzare questo approccio http://jaspan.com/improved_persistent_login_cookie_best_practice (vedere vicino top 'di Miller Design' ) e lo hanno lavorando ad un grado.

Così il flusso di lavoro è:

  1. utente accede e viene emessa una stringa casuale + il loro ID di database crittograficamente sicuro come un cookie persistente (della durata di circa 30 giorni). stringa protetta viene memorizzato nel database di fianco al proprio account utente record.
  2. User poi ritorna al sito in cui i regali del browser il cookie di login, l'ID e la chiave sicura viene cercato nel database e se viene trovata corrispondenza, l'utente viene autenticato automaticamente.
  3. Una volta autenticato una nuova chiave sicura viene generata, memorizzate nel database e nuovo cookie rilasciato.

Non ho questo bel lavoro, tuttavia, non funziona molto bene se l'utente accede da più browser o computer. Ovviamente diversi browser si concluderà con una diversa chiave sicura memorizzato come un cookie, così il flusso di lavoro diventa:

  1. utente accede dal browser A, viene rilasciato un tasto sicuro come biscotto, chiave viene memorizzata nel database.
  2. utente accede dal browser B, viene emesso un diverso tasto sicuro come biscotto. Key viene memorizzato anche nel database, ma sovrascrive la chiave generata dal browser A.
  3. visite utente del sito dal browser Una volta, presenta cookie del browser emessi dal punto 1., ma le partite non più perché la chiave sicura è stato sostituito nel passaggio 2. modo utente deve accedere nuovamente. Un'altra nuova chiave viene generata e sovrascrive la chiave rilasciata al browser B.
  4. Utenti visite da parte del browser B ancora una volta, la chiave non corrisponde, deve accedere di nuovo ecc ecc.

Come posso risolvere questo? Ho bisogno di memorizzare e mantenere più chiavi nel database? Sto andando anche su questo il modo giusto? Ho notato StackOverflow sembra gestire questa e si ricorda di me da diversi browser e computer.

È stato utile?

Soluzione

Da leggere l'articolo si è collegato, mi sembra come il design di Miller è quello di memorizzare la stringa casuale e il nome utente come una coppia in una tabella diversa da quella che l'utente-tavolo. Utilizzando la stringa casuale come l'indice, si può avere più accessi simultanei dallo stesso nome utente pur essendo ragionevolmente ben protetto da dirottamento di sessione.

La tua descrizione indicano che si memorizza la stringa casuale all'interno della user-tavolo, che consentirebbe un solo login al momento.

Altri suggerimenti

Hai bisogno di una terza voce nel cookie, token di una 'serie'. Questo rappresenterà un evento di accesso. Ogni volta che l'utente accede nel tuo sistema, crea una nuova serie, che non cambia fino a quando non logout, o di login di nuovo. Hai ancora il token, cioè Secured Key, che sta aggiornando su ogni richiesta.

Ecco alcuni link per aiutare con questa implementazione:

problemi di database quando permettendo il browser più persistente di registro in

La guida definitiva per l'autenticazione basata su form sito

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top