Не работает гибридная аутентификация
в Boot 2.6 вот такой конфиг позволял иметь гибридную аутентификацию
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication()
.withUser("remote")
.password(passwordEncoder.encode("remote"))
.roles("REMOTE");
DaoAuthenticationProvider dao = new DaoAuthenticationProvider();
dao.setUserDetailsService(accountDetailsService);
dao.setPasswordEncoder(passwordEncoder);
auth.authenticationProvider(dao);
}
однако в 2.7 при попытке реализовать её аналог ин-мемори юзер почему-то не определяется, и детектируются только те, кто в БД
@Bean
public AuthenticationManager authManager(HttpSecurity http) throws Exception {
AuthenticationManagerBuilder auth = http.getSharedObject(AuthenticationManagerBuilder.class);
DaoAuthenticationProvider dao = new DaoAuthenticationProvider();
dao.setUserDetailsService(accountDetailsService);
dao.setPasswordEncoder(passwordEncoder);
UserDetails remote = User.builder()
.username("remote")
.password(passwordEncoder.encode("remote"))
.roles("REMOTE")
.build();
auth.inMemoryAuthentication()
.withUser(remote)
.passwordEncoder(passwordEncoder);
auth.authenticationProvider(dao);
return auth.build();
}
Тест на аутентификацию по httpBasic у ин-мемори юзера выдаёт 401, а тест на юзера из БД но без роли REMOTE - 403.
Что не так?
Ответы (1 шт):
Автор решения: V-CHO
→ Ссылка
Переписываем вот так и радуемся жизни
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
DaoAuthenticationProvider dao = new DaoAuthenticationProvider();
dao.setUserDetailsService(accountDetailsService);
dao.setPasswordEncoder(passwordEncoder);
UserDetails remote = User.builder()
.username("remote")
.password(passwordEncoder.encode("remote"))
.roles("REMOTE")
.build();
inMemoryConfigurer()
.withUser(remote)
.passwordEncoder(passwordEncoder)
.configure(auth);
auth.authenticationProvider(dao);
}
private InMemoryUserDetailsManagerConfigurer<AuthenticationManagerBuilder> inMemoryConfigurer() {
return new InMemoryUserDetailsManagerConfigurer<>();
}