Spring security — вход по паролю и временному паролю

#spring-boot #authentication #spring-security

Вопрос:

Я пытаюсь внедрить пользовательскую аутентификацию в свою службу при загрузке Spring 2.5.

Прямо сейчас у меня есть типичный весенний вход в систему безопасности с использованием фильтра проверки подлинности имени пользователя.

Что мне нужно реализовать/переопределить, чтобы войти в учетную запись с двумя паролями? Я имею в виду основной пароль и временный пароль, назначенный пользователю в случае забывания (отправленный по почте)?

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

Комментарии:

1. @Toerktumlare таковы бизнес-требования. Я уже реализовал это с помощью spring security. Я опубликую свое решение для этого в свободное время

Ответ №1:

Я реализовал это с помощью spring security.

Все, что тебе нужно сделать, это:

  1. Создайте учетные записи пользователей, в которых у вас будет пароль, дата истечения срока действия и другая информация, такая как идентификатор пользователя или адрес электронной почты (вы можете сохранить здесь то, что требуется для вашего проекта).
  2. Создайте таблицу с временным паролем, датой истечения срока действия и идентификатором пользователя
  3. Добавьте функцию, которая назначает временный пароль учетной записи, когда пользователь запрашивает это.
  4. Создайте временный пароль интерфейса
  5. Создайте службу TemporaryPasswordUserDetailsService, реализующую службу UserDetailsService, и найдите пользователя в разделе TemporaryPasswordRepository в переопределенном методе:
  UserDetails loadUserByUsername(String username) throws UsernameNotFoundException;
 
  1. Добавьте в метод impemented UserDetailsService в свой класс конфигурации безопасности:
 protected void configure(AuthenticationManagerBuilder auth) {
  authenticationManagerBuilder
                .userDetailsService(your basic user datails service)
                .passwordEncoder(passwordEncoder());

   authenticationManagerBuilder
                .userDetailsService(TemporaryPasswordUserDetailsService)
                .passwordEncoder(passwordEncoder());
}
 

Поскольку spring авторизует пользователя, когда по крайней мере один из UserDatailsService соответствует паролю, теперь вы можете войти в систему с 2 паролями.

Примечание: Вы также должны реализовать, например, cron, который удалит пароли с истекшим сроком действия из базы данных.