Подтвердить что ты не робот

Руководство по внедрению spring восстановления пароля безопасности с динамическим URL-адресом, отправленным по электронной почте

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

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

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

Стратегия подсказывает исследование из stackoverflow:

  • Пользователь нажимает кнопку забытого пароля, где он вводит свой адрес электронной почты.
  • Динамическая ссылка отправляется на адрес электронной почты
  • Пользователь открывает ссылку на адрес электронной почты
  • Что перенаправляет его на пароль reset page

Что не известно:

  • Как дать динамическую природу ссылок - методы поколений
  • Ссылка имеет тайм-аут - некоторые вопросы были найдены здесь, но часто включают пользовательский обработчик или расширение для spring функций безопасности
  • Методы сопоставления запросов для ответа на такую ​​динамическую ссылку
  • Временные методы хранения ссылок - база данных, сеанс и т.д.

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

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

4b9b3361

Ответ 1

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

В плагине Grails Spring Security UI уже есть опция забыли пароль, которую вы можете использовать напрямую или использовать в качестве ссылки.

Ответ 2

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

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


Посмотрите: https://github.com/OhadR/Authentication-Flows

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