Руководство по реализации spring security password recovery с динамическим URL-адресом, отправленным на электронную почту

Мне было очень трудно сделать восстановление пароля, так как я никогда не делал этого раньше.

до сих пор у меня есть веб-приложение, которое имеет:

Spring Security, где пароль правильно хэшируется и роли пользователей реализованы и работают правильно.

стратегия намекает исследование от stackoverflow:

  1. пользователь нажимает кнопку Забыли пароль, где он вводит свой адрес электронной почты.
  2. динамическая ссылка отправляется на адрес электронной почты
  3. пользователь открывает ссылку в email address
  4. , который перенаправляет его на страницу сброса пароля

чего не знал:

  • как дать ссылку динамический характер - методы поколений
  • ссылка имеет тайм-аут - некоторые вопросы были найдены здесь, но часто включают пользовательский обработчик или расширение для spring security functionality
  • методы отображения запроса, чтобы ответить на такую динамическую ссылку
  • временные методы хранения ссылок - базы данных, сессии и т. д. ?

Как вы можете видеть, список довольно суров для одного вопроса. Так надеялся, что вы могли бы предоставить ресурсы, как это сделать шаг за шагом. Я был немного удивлен, что не смог найти много об этом в документации Spring Security. Спасибо.

Я студент, поэтому не знаю действительно лучших практик отрасли для этого, особенно в контексте Java, поэтому я действительно надеюсь, что кто-нибудь сможет помочь.

2 ответов


проблема на самом деле не имеет большого отношения к безопасности Spring. Если вы знаете структуру пользовательской базы данных и используемый кодер паролей, это просто реализация рабочего процесса, включающего доступ к данным, веб-контроллеры и отправку электронной почты. Ссылка должна содержать случайную строку токена (use SecureRandom и кодировщик base64, например), и он должен храниться в базе данных с идентификатором пользователя и меткой времени (для проверки окна, в котором ссылка действительна). Этот контроллер просто извлечет токен из входящего запроса, загрузит данные из базы данных с помощью токена. Он проверит метку времени, а затем перенаправит пользователя в форму ввода пароля. В зависимости от требований вы также можете захотеть, чтобы они ответили на некоторые другие вопросы безопасности. Затем вы проверите и закодируете пароль и сохраните его в учетной записи, соответствующей идентификатору пользователя, хранящемуся в таблице ссылок сброса. Также имеет смысл запустить пакетное задание для удаления просроченных ссылок из базы данных.

плагин Grails Spring Security UI уже имеет забыли пароль? вариант который вы можете или использовать сразу или использовать как ссылка.


я реализовал проект JAVA для этого варианта использования. Это на GitHub, с открытым исходным кодом.

есть объяснение всему (и если что - то отсутствует-дайте мне знать...)


Взгляните:https://github.com/OhadR/Authentication-Flows

Это клиентское веб-приложение, которое использует auth-потоки, с README со всеми объяснениями. он направляет вас реализация: https://github.com/OhadR/oAuth2-sample/tree/master/authentication-flows