Bcryptpasswordencoder - закодированный пароль не похож на bcrypt

У меня есть приложение SpringBoot 2.0.1.RELEASE mvc, вот мой файл конфигурации

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {


    @Autowired
    private Environment env;


    @Override
    protected void configure(HttpSecurity http) throws Exception {

        final List<String> activeProfiles = Arrays.asList(env.getActiveProfiles());
        if (activeProfiles.contains("dev")) {
            http.csrf().disable();
            http.headers().frameOptions().disable();
        }

        http
                .authorizeRequests()
                .antMatchers(publicMatchers()).permitAll()
                .and()
                .formLogin().loginPage("/login").defaultSuccessUrl("/elcordelaciutat/config")
                .failureUrl("/login?error").permitAll()
                .and()
                .logout().permitAll();
    }

    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {

         PasswordEncoder encoder = PasswordEncoderFactories.createDelegatingPasswordEncoder();
         UserDetails userDetails = User.withUsername("elcor")
                  .password(encoder.encode("elcor"))
                  .roles("ADMIN")
                  .build();
         auth.inMemoryAuthentication().withUser(userDetails);

    }


    private String[] publicMatchers() {

         /** Public URLs. */
        final String[] PUBLIC_MATCHERS = {
                "/webjars/**",
                "/css/**",
                "/js/**",
                "/images/**",
                "/",
                "/about/**",
                "/contact/**",
                "/error/**/*",
                "/console/**"
        };

        return PUBLIC_MATCHERS;

    }

}

Но когда я захожу в приложение, в файле журнала появляется следующее сообщение:

2018-04-11 11:27  [http-nio-5678-exec-7] WARN  o.s.s.c.b.BCryptPasswordEncoder - Encoded password does not look like BCrypt

и я не могу войти ... и пароль правильный. У меня есть эта ошибка после обновления моего приложения с SpringBoot 1 до SpringBoot 2

Быстрым поиском я нашел это. Возможно, формат хэша изменился из-за более новой версии Bcrypt.

Ron Nabuurs 11.04.2018 11:42
2
1
6 624
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Spring Security внесла некоторые важные изменения в версию 5. Одно из них - включение алгоритма, используемого для хеширования пароля в хеш. Это упрощает миграцию.

Общий формат пароля:

{id}encodedPassword 

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

Я также перенес проект из Spring Boot 1 / Spring 4 в Spring Boot 2 / Spring 5 и перешел с BCrypt на PBKDF2.

Мой кодировщик паролей теперь выглядит так:

public PasswordEncoder passwordEncoder() {
    // This is the ID we use for encoding.
    String currentId = "pbkdf2.2018";

    // List of all encoders we support. Old ones still need to be here for rolling updates
    Map<String, PasswordEncoder> encoders = new HashMap<>();
    encoders.put("bcrypt", new BCryptPasswordEncoder());
    encoders.put(currentId, new Pbkdf2PasswordEncoder(PBKDF2_2018_SECRET, PBKDF2_2018_ITERATIONS, PBKDF2_2018_HASH_WIDTH));

    return new DelegatingPasswordEncoder(currentId, encoders);
}

Также требовалось обновить базу данных и префикс всех текущих хэшей с помощью {bcrypt} (раньше я использовал исключительно BCrypt)

Источник: Весенний блог

Другие вопросы по теме