Пока мое приложение представляет собой хэширование пользовательских паролей с использованием простого алгоритма MD5, теперь мы внедрили Spring Security в приложение и предпочли бы вместо этого использовать BCrypt. Моя проблема: как перенести старые пароли в новый алгоритм.Переключение с MD5 на BCrypt с Spring Security
- Могу ли я предоставить несколько кодеров с паролем для обеспечения безопасности Spring, чтобы их можно было использовать по очереди?
- После успешного входа в систему, как изменить пароль, поскольку пароль передается с использованием алгоритма SHA1?
Для проблемы 1, я считаю, что использование CustomAuthenticationProvider может работать, но я полностью смущен тем, как использовать это в нашей системе. Ниже моя configureGlobal функция из класса SecurityConfig
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth.jdbcAuthentication()
.dataSource(dataSource)
.passwordEncoder(passwordEncoder)
.usersByUsernameQuery("SELECT uname AS username, upwd AS password, true AS enabled FROM user_table WHERE uname!='' AND uname IS NOT NULL AND uname=?")
.authoritiesByUsernameQuery("SELECT uname AS username, 'Default' AS role FROM user_table WHERE uname!='' AND uname IS NOT NULL AND uname=?");
}
я не использовал UserDetailsService в моем приложении, и только выше запросы поступают. Я использовал CustomUsernamePasswordAuthetationFilter и CustomPasswordEncoder, если это может быть полезно в этой проблеме.
Спасибо,
MD5 - это алгоритм Хеширования в одностороннем порядке, который нельзя дешифровать (хотя большинство возможных открытых паролей MD5-хэшей найдены в онлайн-режиме, теоретически он не может быть расшифрован). Одним из возможных решений является изменение пароля, хранящегося в БД от MD5 до Bcrypt, с использованием пароля открытого текста, предоставленного пользователем во время входа в систему (Ofcourse только после успешного входа в систему). –
Вы должны иметь подкласс 'BCryptPasswordEncoder', переопределить метод' matches', чтобы сначала разрешить 'BCryptPasswordEncoder', и если совпадение не увенчалось успехом, попробуйте сопоставить MD5 с существующим кодом. Вместо того, чтобы пытаться переименовать существующие пароли, может быть лучше посоветовать пользователям менять свои пароли, как только вы полностью переместитесь в BCrypt. Если у вас есть надежная функция «Забыли пароль», возможно, даже не удастся сопоставить ее с MD5 и позволить пользователям выбирать новые пароли (которые в любом случае будут зашифрованы с помощью BCrypt). – manish
@ user1354678 Простые текстовые пароли не путешествуют по сети, поэтому на стороне сервера я понятия не имею, какой был пароль :(даже после успешного входа в систему. – aProgrammer