2011-01-18 61 views
7

Tôi đang sử dụng Spring Security 3.0.0 và RememberMe liên tục. Khi máy chủ khởi động lại và một cửa sổ trình duyệt vẫn mở, chúng tôi cần có thể tiếp tục sử dụng ứng dụng mà không phải đăng nhập - nếu nhớ tôi đã được chọn.Mùa xuân RememberMe processAutoLoginCookie

Tôi nhận được org.springframework.security.web.authentication.rememberme.CookieTheftException: Mã thông báo ghi nhớ không hợp lệ (Series/token) không khớp. Ngụ ý tấn công trộm cắp cookie trước đó, khi tôi cố gắng tiếp tục sử dụng ứng dụng sau khi khởi động lại máy chủ. Điều tôi nhận thấy là phương thức processAutoLoginCookie được gọi hai lần. Tôi cung không chăc tại sao. Hành vi của chính phương thức đó có vẻ chính xác, tức là cập nhật mã thông báo trong cơ sở dữ liệu và cập nhật cookie trong ứng dụng khách.

Bất kỳ trợ giúp nào về điều này sẽ được đánh giá cao.

Cảm ơn bạn.

+0

Bạn đã tìm thấy câu trả lời cho vấn đề này chưa? – mmatloka

+1

Điều này đã xảy ra từ lâu và tôi quên các chi tiết. Nhưng trong ngắn hạn đây là vấn đề - Trong trường hợp cụ thể của tôi đó là bởi vì chúng tôi đã sử dụng Comet để bỏ phiếu dài. Vì vậy, phương thức processAutoLoginCookie được gọi một lần bởi việc bỏ phiếu dài và từ tải trang thông thường. Vì vậy, trước khi phản ứng đầu tiên được nhận, cookie đã thay đổi trong cơ sở dữ liệu. Một lần nữa, tôi quên các chi tiết chính xác nhưng điều này là nó trong một nutshell. – smk

+0

Tôi đã đăng một câu hỏi tương tự nhưng tôi đã tự trả lời câu hỏi đó =). Giải pháp tôi có thể tìm thấy ở đây -> [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

Trả lời

1

Tôi đã gặp sự cố tương tự! ProcessAutoLoginCookie đã được gọi hai lần liên tiếp để cuộc gọi đầu tiên thành công, nhưng cuộc gọi thứ hai không thành công vì cookie được cập nhật bởi cuộc gọi đầu tiên.

Giải pháp duy nhất của tôi là phân lớp PersistentTokenBasedRememberMeServices và ghi đè phương thức processAutoLoginCookie. Tôi đã phải sao chép mã hiện tại cho processAutoLoginCookie và nhận xét về việc ném số CookieTheftException.

Lưu ý: Giải pháp của tôi sẽ mở ra lỗ hổng bảo mật!

Nếu bạn vui mừng cho phép xảy ra các vụ trộm cắp Cookie (hệ thống của tôi được sử dụng nội bộ và không chứa dữ liệu nhạy cảm) thì giải pháp này sẽ hoạt động.

Ngoài ra, bạn cũng có thể phân lớp PersistentTokenBasedRememberMeServices và thêm một giải pháp mạnh mẽ hơn mà vẫn kiểm tra ngoại lệ cho Cookie Trộm cắp nhưng cho phép hai lần gọi tới processAutoLoginCookie được thực hiện.