2011-01-18 14 views
7

Sto utilizzando Spring Security 3.0.0 e persistente RememberMe. Quando il server si riavvia e una finestra del browser è ancora aperta, dobbiamo essere in grado di continuare a utilizzare l'applicazione senza dover effettuare il login, se ricordati di me è selezionata.Spring RememberMe processAutoLoginCookie

Ricevo un org.springframework.security.web.authentication.rememberme.CookieTheftException: errata corrispondenza di token di ricordi (serie/token). Implica il precedente attacco di furto di cookie, quando provo a continuare a utilizzare l'applicazione dopo il riavvio del server. Quello che noto è che il metodo processAutoLoginCookie viene chiamato due volte. Non sono sicuro del perché. Il comportamento del metodo stesso sembra essere corretto, ovvero aggiornare il token nel database e aggiornare il cookie nel client.

Qualsiasi aiuto su questo sarebbe apprezzato.

Grazie.

+0

Hai trovato una risposta a questo problema? – mmatloka

+1

Questo è successo molto tempo fa e ho dimenticato i dettagli. Ma in breve questo era il problema - Nel mio caso particolare era perché stavamo usando Comet per lunghi sondaggi. Quindi il metodo processAutoLoginCookie è stato chiamato una volta dal lungo polling e dal caricamento regolare della pagina. Quindi, prima che la prima risposta fosse ricevuta, il cookie era cambiato nel database. Ancora una volta, ho dimenticato i dettagli esatti ma questo è stato in poche parole. – smk

+0

Ho postato una domanda simile ma ho risposto da sola =). La soluzione che ho può essere trovata qui -> [http://stackoverflow.com/questions/13393774/invalid-remember-me-token-series-token-mismatch-implies-previous-cookie-theft/13402874#13402874] (http://stackoverflow.com/questions/13393774/invalid-remember-me-token-series-token-mismatch-implies-previous-cookie-theft/13402874#13402874) – Warner

risposta

1

Stavo ottenendo lo stesso identico problema! Il processoAutoLoginCookie veniva chiamato due volte di seguito in modo che la prima chiamata fosse andata a buon fine, ma la seconda chiamata fallisce perché il cookie viene aggiornato dalla prima chiamata.

La mia unica soluzione era sottoclasse PersistentTokenBasedRememberMeServices e sovrascrivere il metodo processAutoLoginCookie. Ho dovuto copiare il codice esistente per processAutoLoginCookie e commentare il lancio dello CookieTheftException.

Nota: la mia soluzione aprirà un buco di sicurezza!

Se si è disposti a consentire il verificarsi di furti di cookie (il mio sistema è utilizzato internamente e non contiene dati sensibili), questa soluzione funzionerà.

In alternativa, si potrebbe anche creare una sottoclasse PersistentTokenBasedRememberMeServices e aggiungere una soluzione più robusta che controlla ancora per Cookie Eccezioni furto, ma permette ai due chiamate successive processAutoLoginCookie da effettuare.

Problemi correlati