У меня есть приложение Spring Boot 2 REST, и я хочу настроить Spring Security для поддержки входа в систему Google или проверки подлинности LDAP для тех же ресурсов (например, / сотрудников)
Я уже выполнил аутентификацию через httpBasic (который подключается к серверу Apache AD LDAP).
Также я настроил аутентификацию через Google OAuth2 Sign-In.
Обе эти конфигурации работают корректно по отдельности (я могу аутентифицироваться через Google Sign-In, но не могу одновременно с LDAP, потому что мне нужно повторно настроить безопасность пружины), и теперь мне нужна возможность аутентификации обоими этими способами в то же время.
Конфигурация My Spring Security для аутентификации LDAP
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.csrf()
.disable()
.authorizeRequests()
.antMatchers("/", "/login**","/callback/", "/webjars/**", "/error**")
.permitAll()
.anyRequest()
.authenticated()
.and()
.httpBasic()
.and()
.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS);
}
@Override
public void configure(AuthenticationManagerBuilder auth) throws Exception {
auth
.ldapAuthentication()
.ldapAuthoritiesPopulator(customLdapAuthoritiesPopulator)
.userDnPatterns("uid={0},ou=people")
.groupSearchBase("ou=groups")
.contextSource()
.url(env.getProperty("spring.ldap.urls") + env.getProperty("spring.ldap.base"))
.and()
.passwordCompare()
.passwordAttribute("userPassword")
.passwordEncoder(new LdapShaPasswordEncoder());
}
А вот так это выглядит, когда я переконфигурирую Spring Security для входа в Google OAuth2
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.csrf()
.disable()
.authorizeRequests()
.antMatchers("/", "/login**","/callback/", "/webjars/**", "/error**")
.permitAll()
.anyRequest()
.authenticated()
.and()
.oauth2Login()
.userInfoEndpoint().oidcUserService(customOAuth2UserService);
}
Результат, который мне нужен: у пользователя есть два варианта: аутентификация с Oauth2 или, если он хочет, с httpBasic LDAP, независимо от того, каким путем.
Я думаю, что есть способ настроить Spring Security, чтобы OAuth2 и httpBasic LDAP работали вместе, но я не знаю, как это сделать.