Spring Boot JWT - Добавление безопасности BCrypt - Получение доступа запрещено - PullRequest
0 голосов
/ 24 апреля 2020

У меня есть сервер приложений, который использует среду загрузки Spring с токеном JWT. Я хочу зашифровать пароль пользователя, но сталкиваюсь с проблемами входа в систему. Я могу зашифровать пароль пользователя, используя userModel.setPassword(new BCryptPasswordEncoder().encode(userModel.getPassword()));, но при попытке войти в систему я получаю Encoded password does not look like BCrypt. Я пытался изменить свой метод аутентификации и зашифровать пароль от входа в систему, но это не сработало.

       new UsernamePasswordAuthenticationToken(
        authenticationRequest.getUsername(),
        new BCryptPasswordEncoder().encode( authenticationRequest.getPassword())));

Буду признателен за вашу помощь, если вы сможете указать мне прямое направление или дать мне решение. ниже приведен мой файл настроек безопасности.

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    private final MyUserDetailService myUserDetailService;
    private final JwtRequestFilter jwtRequestFilter;

    public SecurityConfig(MyUserDetailService myUserDetailService, JwtRequestFilter jwtRequestFilter) {
        this.myUserDetailService = myUserDetailService;
        this.jwtRequestFilter = jwtRequestFilter;
    }

    @Override
    // Authentication : User --> Roles
    protected void configure(AuthenticationManagerBuilder auth)
            throws Exception {

        auth.authenticationProvider(authProvider());
    }

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

    @Bean
    public DaoAuthenticationProvider authProvider() {
        DaoAuthenticationProvider authProvider = new DaoAuthenticationProvider();
        authProvider.setUserDetailsService(myUserDetailService);
        authProvider.setPasswordEncoder(passwordEncoder());
        return authProvider;
    }

    @Override
    // Authorization : Role -> Access
    protected void configure(HttpSecurity http) throws Exception {

        http
                .csrf().disable()
                .formLogin().disable()
                .headers().frameOptions().disable()
                .and()
                .authorizeRequests()
                .antMatchers("/authenticate").permitAll()                .and()
                .sessionManagement()
                .sessionCreationPolicy(SessionCreationPolicy.STATELESS);
        http.addFilterBefore(jwtRequestFilter, UsernamePasswordAuthenticationFilter.class);
    }

    @Override
    @Bean
    public AuthenticationManager authenticationManagerBean() throws Exception {
        return super.authenticationManagerBean();
    }

    @Bean
    CorsConfigurationSource corsConfigurationSource() {
        final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", new CorsConfiguration().applyPermitDefaultValues());
        return source;
    }
}

Я не могу пройти аутентификацию (логин), используя зашифрованный пароль или необработанный пароль. Пожалуйста, дайте мне знать, что я могу сделать, чтобы исправить.

Спасибо за вашу помощь.

1 Ответ

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

Исключение выдается, если сохраненный в базе данных пароль зашифрован неправильно.

Убедитесь, что он начинается с $2a$ или $2b$ или $2y$ и имеет длину ровно 60 символов.

...