Как добавить bcrypt в Spring Security Auth? - PullRequest
0 голосов
/ 16 апреля 2020

У меня настроена пружинная защита с JPA и JWT, и она отлично работает для паролей в виде простого текста,

Я пытался добавить Bcrypt, но не смог получить его на workd

  • I попытался извлечь соль из сохраненного пароля и закодировать пароль в следующем запросе, сравнить их для проверки подлинности.

Но я не могу получить соль.

вот код

//SecurityConfig
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
    auth.userDetailsService(userDetailsService).passwordEncoder(new BCryptPasswordEncoder());
}

//Controller
    @RequestMapping(value="/authenticate", method=RequestMethod.POST)
    public ResponseEntity<?> createAuthenticationToken(@RequestBody AuthenticationRequest authenticationRequest) throws Exception {
        try {
            authenticationManager.authenticate(
                new UsernamePasswordAuthenticationToken(authenticationRequest.getUsername(), authenticationRequest.getPassword())
            );
        } catch (BadCredentialsException e) {
            throw new Exception("Incorrect username or password", e);
        }

        final UserDetails userDetails = userDetailsService.loadUserByUsername(authenticationRequest.getUsername());

        final String jwt = jwtTokenUtil.generateToken(userDetails);

        return ResponseEntity.ok(new AuthenticationResponse(jwt));
    }

Я сохраняю пароль как

//UserService
public User saveUser(UserDto userDto) {
        User user = new User();
        user.setUsername(userDto.getUsername());
        user.setPassword(passwordEncoder.encode(userDto.getPassword()));
        user.setRoles(userDto.getRoles());
        user.setActive(true);
        userRepository.save(user);
        return user;
    }

1 Ответ

0 голосов
/ 16 апреля 2020

Вам необходимо зарегистрировать BCrypt Password Encoders как Spring Bean:

@Bean
public PasswordEncoder passwordEncoder() {
    return new BCryptPasswordEncoder();
}
...