2011-01-18 8 views
7

Używam Spring Security 3.0.0 i persistent RememberMe. Gdy serwer zostanie ponownie uruchomiony, a okno przeglądarki nadal będzie otwarte, musimy mieć możliwość dalszego korzystania z aplikacji bez konieczności logowania się - jeśli pamiętasz mnie, wybrano.Wiosna RememberMe processAutoLoginCookie

Dostaję org.springframework.security.web.authentication.rememberme.CookieTheftException: Nieprawidłowy niedopasowanie pamięci-tokena (Series/token). Implikuje poprzedni atak kradzieży plików cookie, gdy próbuję dalej korzystać z aplikacji po ponownym uruchomieniu serwera. Zauważyłem, że metoda processAutoLoginCookie jest wywoływana dwa razy. Nie jestem pewien dlaczego. Zachowanie samej metody wydaje się być poprawne, tj. Zaktualizować token w bazie danych i zaktualizować plik cookie w kliencie.

Każda pomoc w tym zakresie byłaby doceniana.

Dziękuję.

+0

Czy znalazłeś odpowiedź na ten problem? – mmatloka

+1

To stało się dawno temu i zapominam o szczegółach. Krótko mówiąc, był to problem - w moim przypadku było tak dlatego, że używaliśmy Komety do długiego głosowania. Tak więc metoda processAutoLoginCookie została wywołana raz przez długie pollingu i od zwykłego ładowania strony. Tak więc, zanim otrzymano pierwszą odpowiedź, plik cookie zmienił się w bazie danych. Ponownie, zapominam o szczegółach, ale to było w pigułce. – smk

+0

Napisałem podobne pytanie, ale odpowiedziałem na nie sam =). Rozwiązanie, które mam, można znaleźć tutaj -> [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

Odpowiedz

1

Otrzymałem dokładnie ten sam problem! ProcesAutoLoginCookie był wywoływany dwa razy z rzędu, więc pierwsze połączenie zakończyło się pomyślnie, ale drugie połączenie nie powiedzie się, ponieważ plik cookie jest aktualizowany przez pierwsze połączenie.

Jedynym rozwiązaniem było podklasy PersistentTokenBasedRememberMeServices i zastąpić metodę processAutoLoginCookie. Musiałem skopiować istniejący kod do processAutoLoginCookie i skomentować wyrzucenie CookieTheftException.

Uwaga: Moje rozwiązanie otworzy lukę w zabezpieczeniach!

Jeśli chcesz, aby wystąpiły usterki plików cookie (mój system jest używany wewnętrznie i nie zawiera poufnych danych), to rozwiązanie zadziała.

Alternatywnie można również podklasę PersistentTokenBasedRememberMeServices i dodać bardziej niezawodne rozwiązanie, które nadal sprawdza wyjątki dotyczące kradzieży plików cookie, ale umożliwia wykonanie dwóch następujących po sobie połączeń do processAutoLoginCookie.