J'ai l'application REST Spring Boot 2 et je souhaite configurer Spring Security pour prendre en charge la connexion Google OU l'authentification LDAP aux mêmes ressources (/ employés par exemple)
J'ai déjà effectué l'authentification via httpBasic (qui se connecte au serveur Apache AD LDAP).
J'ai également configuré l'authentification via Google OAuth2 Sign-In. Ces deux configurations fonctionnent correctement séparément (je peux m'authentifier via Google Sign-In, mais je ne peux pas avec LDAP en même temps, car je dois recofingurer la sécurité du ressort), et maintenant j'ai besoin de la possibilité de m'authentifier avec les deux méthodes en même temps.
Ma configuration Spring Security pour l'authentification 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());
}
Et voici à quoi ça ressemble lorsque je reconfigure Spring Security pour Google OAuth2 Sign-In
@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);
}
Le résultat dont j'ai besoin: l'utilisateur a deux options: s'authentifier avec Oauth2, ou, s'il le souhaite, avec httpBasic LDAP, peu importe de quelle manière.
Je pense qu'il existe un moyen de configurer Spring Security pour que OAuth2 et httpBasic LDAP fonctionnent ensemble, mais je ne sais pas comment le faire.
C'est possible.
L'authentification de base utilise de base où comme oauth utilise le support dans le cadre de l'en-tête d'autorisation d'en-tête.
Nous pouvons utiliser un matcher de requêtes personnalisé pour détecter l'authentification de base et s'authentifier avec LDAP. Sinon, ça passera par oauth.
Tout d'abord, commandez le WebSecurityConfigurerAdapter plus haut que le serveur d'authentification Oauth,
@Configuration
@Order(2)
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
Utilisez notre mappeur de demandes personnalisé,
http
.csrf()
.disable()
.requestMatcher(new BasicRequestMatcher())
.authorizeRequests()
.antMatchers("/", "/login**","/callback/", "/webjars/**", "/error**")
.permitAll()
.anyRequest()
.authenticated()
.and()
.httpBasic()
.and()
.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS);
Matcher de demande personnalisé,
private static class BasicRequestMatcher implements RequestMatcher {
@Override
public boolean matches(HttpServletRequest request) {
String auth = request.getHeader("Authorization");
return (auth != null && auth.startsWith("Basic"));
}
Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.
En cas d'infraction, veuillez [email protected] Supprimer.
laisse moi dire quelques mots