Какова роль UserDetailsService в AuthenticationManager из Spring Security? - PullRequest
1 голос
/ 26 мая 2020

Я пытаюсь создать страницу входа в систему, которая возвращает JWT в случае успешного входа в систему, но я не могу понять, как работают некоторые функции. В настоящее время я следую хорошему руководству по аутентификации JWT, в котором автор создает конечную точку «/ login», которая выглядит так:

@PostMapping("/login")
public String login(@RequestBody LoginUserDto loginUser) {
    try{
      authenticationManager.authenticate(new UsernamePasswordAuthenticationToken(//email,//password));
    }catch(BadCredentialsException exception) {....}

    final UserDetails userDetails = userDetailsService.loadUserByUsername(//email);
    return createToken(userDetails.getUsername());     
}

Почему он все еще вызывает userDetailsService.loadUserByUsername(), если метод authenticate() не работает? t throw any BadCredentialsException?

В любом случае, я видел, что этот userDetailsService настроен внутри класса WebSecurityConfigurerAdapter:

@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
    auth.userDetailsService(userService)
            .passwordEncoder(NoOpPasswordEncoder.getInstance());
}

Но опять же, какова цель это UserDetailsService, если он использует AuthenticationManager? Потому что почти в каждом учебнике я видел, что мне нужно реализовать этот интерфейс ...

1 Ответ

2 голосов

UserDetailsService используется для загрузки пользователя из внутренней структуры, такой как база данных. Метод loadUserByUsername вызывается, когда пользователь пытается войти в систему с именем пользователя и паролем. Метод loadUserByUsername возвращает объект UserDetails, в котором вы можете получить информацию об аутентификации и авторизации пользователя (подробнее c информация от пользователя домена, например: номер сотрудника, полное имя). Таким образом, он может понадобиться вам для более подробного использования в процессе работы приложения, например, чтобы узнать, соответствует ли полное имя пользователя logi c. Вызов authenticationManager.authenticate позволяет проверить учетные данные поставщика (LDAP, База данных, OAUTH и др. c).

Создание настраиваемого объекта UserDetailsService - это простой механизм, который позволяет Spring Безопасность для принятия решений по безопасности на основе вашей пользовательской модели домена. Spring Security требует UserDetailsService для использования встроенной поддержки запомнить меня, а объект UserDetailsService не работает, если аутентификация не основана на имени пользователя и пароле.

...