Моя проблема заключается в том, что я хотел бы иметь двух поставщиков аутентификацииSpring Загрузочный безопасности - несколько провайдеров аутентификации
ДО: у меня UserDetailServiceImpl и я удостоверила пользователей от БД (не уверен, что провайдер это) пользователь получил роль в соответствии с данными в БД
СЕЙЧАС: Я использовал поставщик ActiveDirectoryLdapAuthentication следующего
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
super.configure(auth);
auth.authenticationProvider(activeDirectoryLdapAuthenticationProvider()).userDetailsService(userDetailService);
}
@Bean
public AuthenticationManager authenticationManager() {
return new ProviderManager(Arrays.asList(activeDirectoryLdapAuthenticationProvider()));
}
@Bean
public AuthenticationProvider activeDirectoryLdapAuthenticationProvider() {
MyActiveDirectoryLdapAuthenticationProvider provider = new MyActiveDirectoryLdapAuthenticationProvider(domain, url, rootDN);
provider.setConvertSubErrorCodesToExceptions(true);
provider.setUseAuthenticationRequestCredentials(true);
return provider;
}
Я заставил его работать, поэтому я могу пройти аутентификацию.
ПРОБЛЕМА:
- Я не могу сейчас войти в систему с базой данных пользователей больше, только LDAP в настоящее время.
- UserDetailsService не используется, и какую роль у пользователя есть?
- Есть ли способ добавить роль по умолчанию для аутентифицированного пользователя LDAP?
Итак, как включить обоих поставщиков? Как добавить роли пользователю, прошедшим проверку подлинности через LDAP auth.provider?
Я также очень благодарен за общую картину, что здесь происходит (под капотом). Какова роль каждого из используемых здесь классов, действительно непонятно, как это работает (AuthenticationManager, AuthenticationManagerBuilder, AuthenticationProvider и т. Д.) Может быть, это просто скрыто автоконфигурацией и так, но даже глядя на Spring Security напрямую не делает меня любой разумнее.
Спасибо за любые подсказки
UPDATE Этот код, кажется, работает нормально
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.authenticationProvider(activeDirectoryLdapAuthenticationProvider()).userDetailsService(userDetailService);
}
public AuthenticationProvider activeDirectoryLdapAuthenticationProvider() {
MyActiveDirectoryLdapAuthenticationProvider provider = new MyActiveDirectoryLdapAuthenticationProvider(domain, url, rootDN);
provider.setConvertSubErrorCodesToExceptions(true);
provider.setUseAuthenticationRequestCredentials(true);
provider.setAuthoritiesMapper(new SimpleAuthorityMapper());
return provider;
}
Означает ли это, что я не могу автоматически защищаться от двух провайдеров сразу?Наличие суперпользователя в базе данных, возможность входа в систему, если LDAP недоступен и т. Д. Власть может быть полезна, и мы, вероятно, также имеем некоторые группы в AD, я проверю. Попробуем ваши советы завтра. Спасибо, сейчас. – Zveratko
Без '@Bean public AuthenticationManager authenticationManager()' он полностью перестает работать: -/ – Zveratko
Создано несколько созданных AuthenticationManagerBuilders, я думал, что должно быть только одно. Я не понимаю. – Zveratko