Как действительно Помнит Меня работа в безопасности Spring?

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

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

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

Как и где безопасность Spring сохраняет cookie-session карта перед завершением работы сервера? Действительно ли это является определенным для сервера (т.е. что-то другое происходится в Tomcat, Причал и т.д.)?

P.S. еще одна связанная проблема с безопасностью Spring и повторным развертыванием: даже если я не отсчитываю RememberMe и войдите в систему, я все еще распознан после повторного развертывания в течение приблизительно 3 минут. Действительно ли это является закрепляемым?

12
задан Roman 29 June 2010 в 16:31
поделиться

2 ответа

В документации Spring Security обсуждается , как это на самом деле работает.

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

base64 (username + ":" + expirationTime + ":" + md5Hex (username + ":" + expirationTime + " : "пароль +": "+ ключ))

...

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

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

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

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

12
ответ дан 2 December 2019 в 07:02
поделиться

Не путайте файлы cookie сеанса с файлами cookie "Запомнить меня".

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

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

Для аутентификации пользователя с помощью файла cookie «Запомнить меня» Spring Security предоставляет 2 стратегии:

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

Похожие вопросы: