2010-06-29 3 views
9

Мне любопытно, как работает «Помни меня» и как она работает в Spring Security?Как мне помнить о работе весенней безопасности?

Я понимаю, что сервер отправляет клиенту долговечные файлы cookie. И затем клиент отправляет файл cookie, и сервер может распознать клиента, потому что на сервере есть что-то вроде хэш-карты с отношениями cookie --> session.

Я не понимаю, как сервер [серверное приложение] распознает клиента с помощью файла cookie после перезапуска сервера [Tomcat].

Как и где происходит сохранение безопасности Spring cookie-session карта до выключения сервера? Является ли он специфичным для сервера (т. Е. Что-то другое происходит в Tomcat, Jetty и т. Д.)?

P.S. еще одна проблема, связанная с Spring Security и перераспределением: даже если я не отмечу RememberMe и войдите в систему, я по-прежнему признан после перераспределения в течение примерно 3 минут. Это исправление?

ответ

9

The Spring Security docs discuss как это фактически работает.

Этот подход использует хэширование для достижения полезной стратегии запоминания. В сущности, печенье отправляется в браузер при успешной интерактивной аутентификации с куки быть составлены следующим образом:

base64(username + ":" + expirationTime + ":" + md5Hex(username + ":" + expirationTime + ":" password + ":" + key))

...

Как таковой помните меня маркер действителен только для указанного периода, при условии, что имя пользователя, пароль и ключ не будут изменены. Примечательно, что у этого есть потенциальная проблема безопасности, так как захваченный токен mem-me будет использоваться любым пользовательским агентом до тех пор, пока истечет срок действия токена. Это та же проблема, что и для дайджест-аутентификации.

В основном cookie содержит имя пользователя, пароль, срок действия и ключ (который вы указали), все из которых равны hashed. Когда ваш браузер отправляет содержимое этого куки на сервер, Spring Security:

  1. Получает пароль из внутреннего интерфейса для данного пользователя
  2. Вычисляют md5Hex() от имени пользователя/пароля/и т.д. из базы данных и сравнивают это значение в файле cookie
  3. Если они совпадают - вы вошли в систему! Если это не совпадение, вы предоставили поддельный файл cookie или изменили одно из имени пользователя/пароля/ключа.

Основное предположение в том, что хэш-функция - md5Hex() часть выше - дает возможность легко кодировать некоторые части данных в одном направлении, пока невероятно трудно и непрактично назад (восстановить пароль от md5Hex текст).

8

Не путайте сеансовые куки с помощью Запомнить меня cookies.

Session cookie отправляется сервером (например, Tomcat) и используется для связывания входящего запроса с сеансом.

Помните, что cookie отправляется Spring Security для аутентификации клиента на разных сеансах (например,по истечении первоначальной сессии или после перезапуска сервера).

Для проверки подлинности пользователя Запомнить меня Cookie Spring Security обеспечивает 2 стратегии:

  • TokenBasedRememberMeServices - используется по умолчанию, менее безопасный - печенье содержит хэш пароля и другие данные
  • PersistentTokenBasedRememberMeServices - более безопасной , требует доступа к базе данных - cookie содержит уникальный идентификатор, хранящийся в базе данных
Смежные вопросы