Создать учетную запись, забыть пароль и изменить пароль

Spring Security отлично подходит, когда разработчик хочет защитить свое веб-приложение.

Однако как насчет создания учетной записи? и "забыли пароль"? на большинстве страниц входа есть эти ссылки, а также поля имени пользователя и пароля. Страница входа Spring по умолчанию не имеет этих ссылок... в хорошем случае она может поддерживать "запомнить меня"...

Поддерживает ли Spring эти потоки: создание учетной записи, забытый пароль и изменение пароля? Если ответ да, не могли бы вы указать мне некоторые документы?

Я искал этот вопрос, но ничего не нашел.

Спасибо!


person user3619976    schedule 09.05.2014    source источник
comment
Я думаю, что нет. Поскольку эти действия не являются универсальными, они отличаются от одного приложения к другому. Как Spring узнает, какие поля необходимы в вашей регистрационной форме? или как вы хотите восстановить пароль? (по электронной почте, смс и т. д.)   -  person luizcarlosfx    schedule 09.05.2014
comment
Я понимаю; но я подумал, может быть, есть что-то универсальное, настраиваемое и расширяемое (как и все другие проекты Spring...)   -  person user3619976    schedule 09.05.2014
comment
Это не так сложно реализовать. Создать учетную запись — это основная форма. Я реализовал оба 2 в своем проекте и не испытывал никаких трудностей. Чтобы восстановить пароль, я отправляю электронное письмо пользователю с уникальным идентификатором (java.sun.com/javase/6/docs/api/java/util/UUID.html), и у меня есть контроллер, который проверяет этот идентификатор и, если он действителен (хранится в моей таблице user_request), я пересылаю пользователя на страницу, где он определит новый пароль, так как исходный пароль зашифрован.   -  person luizcarlosfx    schedule 10.05.2014
comment
@luizcarlosfx: это не так сложно реализовать, но вы должны убедиться, что позаботились обо всех случаях. например что произойдет, если пользователь попытается создать учетную запись, которая уже существует? что произойдет, если пользователь попытается создать уже существующую, но неактивную учетную запись? как насчет политики пароля? (слишком длинный/слишком короткий/сколько заглавных букв и т. д.) как насчет отправки пользователю электронного письма со ссылкой для активации? как насчет контроллера, который получит клик по ссылке и активирует учетную запись? и все больше и больше... нужно написать много кода, друг мой.   -  person OhadR    schedule 10.05.2014
comment
Я заботился обо всем, и я до сих пор говорю, что это не так сложно. Spring предлагает множество интересных функций, которые упрощают работу. Прежде всего, используйте валидатор спящего режима для проверки вашего пользователя (проверьте размер пароля, размер имени пользователя и все, что вы хотите), чтобы проверить, существует ли имя пользователя. Я делаю запросы ajax, которые проверяют базу данных, если имя пользователя уже используется или если пользователь отключен. Проверка электронной почты очень похожа на запрос на восстановление пароля. Я просто храню код запроса в базе данных в своей таблице user_request, и у меня есть специальные контроллеры для проверки правильности этих кодов.   -  person luizcarlosfx    schedule 10.05.2014
comment
Spring Mail упрощает отправку электронных писем. Я отправляю по электронной почте ссылку, подобную этой: http:localhost:8080/confirm-account?confirmation-code=56b823db-2975-490e-8795-9564f0742b9f   -  person luizcarlosfx    schedule 10.05.2014


Ответы (2)


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


EDIT: я видел комментарии типа "Это не так сложно реализовать". Истинный. Но вы должны убедиться, что вы заботитесь обо всех случаях. Например, что произойдет, если пользователь попытается создать уже существующую учетную запись? что произойдет, если пользователь попытается создать учетную запись, которая уже существует, но неактивна? как насчет политики пароля? (слишком длинный/слишком короткий/сколько заглавных букв и т. д.) как насчет отправки пользователю электронного письма со ссылкой для активации? как вы создаете эту ссылку? как вы его шифруете? как насчет контроллера, который получит клик по ссылке и активирует учетную запись? и все больше и больше...


Однако я сделал шаг вперед и попытался написать что-то, что будет отвечать большинству потоков — регистрация, забытый пароль, смена пароля и т. д., и что-то, что будет достаточно защищено, чтобы приложения могли использовать его без опасения, что его легко взломают.

Для этого варианта использования я реализовал проект JAVA. Это открытый исходный код, основанный на Spring-Security. Версия выпуска находится на Maven-Central, поэтому вам не нужно ее компилировать, но вместо этого вы можете получить ее как зависимость от maven для своего проекта!

<dependency>
    <groupId>com.ohadr</groupId>
    <artifactId>authentication-flows</artifactId>
    <version>1.5.0-RELEASE</version>
</dependency>

Я думаю, что это ответ на ваш вопрос...

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

Вы можете найти здесь пример кода клиентского приложения (т. е. использования).

Это главная страница проекта плюс демо и другая демонстрация здесь (но это приложение, которое после обновления до версии 1.6.1 требует входа в систему с адресом электронной почты с "хорошим" доменом - nice.com, поэтому вы не можете использовать его для демонстрации; используйте первый пример). Это клиентское веб-приложение, использующее потоки авторизации, с README со всеми пояснениями.

Надеюсь, это поможет!

person OhadR    schedule 09.05.2014
comment
выглядит неплохо! здорово! однако все формы (и beans.xml) находятся на стороне клиента, так что клиент все равно должен что-то добавлять... - person user3619976; 10.05.2014
comment
спасибо :-) конечно, формы пользовательского интерфейса - это то, что каждое приложение хочет по-своему. так что нет смысла пытаться обобщать форму. однако я задокументировал, какие поля должны появляться в этих формах. - person OhadR; 10.05.2014
comment
@DirkConradCoetsee, спасибо! ты пробовал? вы используете его в своем приложении? мне любопытно... - person OhadR; 12.09.2014
comment
Привет, я занят, пытаясь это сделать. Немного потрудился над реализацией. Могу ли я связаться с вами по поводу некоторых деталей? В нем есть буквально все, что мне нужно. - person D2TheC; 12.09.2014
comment
Конечно. вы можете опубликовать здесь, в SO, свои вопросы и пометить их authentication-flows - person OhadR; 16.04.2015

Я думаю, что appfuse — это инструмент для того, что вам нужно. Эти строки взяты из его документации:

AppFuse поставляется с функциями, которые нужны многим приложениям, в том числе:

  • Аутентификация и авторизация
  • Управление пользователями
  • «Запомнить меня» (сохраняет вашу регистрационную информацию, чтобы вам не приходилось каждый раз входить в систему)
  • напоминание пароля
  • Регистрация и регистрация
  • SSL-переключение
  • Электронная почта
  • URL-адреса без расширений Загрузка файлов
  • Общий CRUD-бэкэнд
  • Полная поддержка Eclipse, IDEA и NetBeans
  • Быстрый запуск и отсутствие развертывания с помощью плагина Maven Jetty.
  • Возможность тестирования на нескольких серверах приложений и базах данных с Cargo и профилями
person Dandelion    schedule 23.10.2016