|
@@ -42,6 +42,7 @@ import org.springframework.mock.web.MockHttpServletRequest;
|
|
|
import org.springframework.mock.web.MockHttpServletResponse;
|
|
|
import org.springframework.mock.web.MockHttpSession;
|
|
|
import org.springframework.security.authentication.AuthenticationManager;
|
|
|
+import org.springframework.security.authentication.AuthenticationProvider;
|
|
|
import org.springframework.security.authentication.AuthenticationServiceException;
|
|
|
import org.springframework.security.config.Customizer;
|
|
|
import org.springframework.security.config.annotation.SecurityContextChangedListenerConfig;
|
|
@@ -59,6 +60,7 @@ import org.springframework.security.saml2.core.Saml2ErrorCodes;
|
|
|
import org.springframework.security.saml2.core.Saml2Utils;
|
|
|
import org.springframework.security.saml2.core.TestSaml2X509Credentials;
|
|
|
import org.springframework.security.saml2.provider.service.authentication.AbstractSaml2AuthenticationRequest;
|
|
|
+import org.springframework.security.saml2.provider.service.authentication.OpenSaml4AuthenticationProvider;
|
|
|
import org.springframework.security.saml2.provider.service.authentication.Saml2AuthenticatedPrincipal;
|
|
|
import org.springframework.security.saml2.provider.service.authentication.Saml2Authentication;
|
|
|
import org.springframework.security.saml2.provider.service.authentication.Saml2AuthenticationException;
|
|
@@ -353,6 +355,15 @@ public class Saml2LoginConfigurerTests {
|
|
|
.andExpect(redirectedUrl("http://localhost/saml2/authenticate/registration-id"));
|
|
|
}
|
|
|
|
|
|
+ @Test
|
|
|
+ public void saml2LoginWhenCustomAuthenticationProviderThenUses() throws Exception {
|
|
|
+ this.spring.register(CustomAuthenticationProviderConfig.class).autowire();
|
|
|
+ AuthenticationProvider provider = this.spring.getContext().getBean(AuthenticationProvider.class);
|
|
|
+ this.mvc.perform(post("/login/saml2/sso/registration-id").param("SAMLResponse", SIGNED_RESPONSE))
|
|
|
+ .andExpect(status().isFound());
|
|
|
+ verify(provider).authenticate(any());
|
|
|
+ }
|
|
|
+
|
|
|
private void performSaml2Login(String expected) throws IOException, ServletException {
|
|
|
// setup authentication parameters
|
|
|
this.request.setRequestURI("/login/saml2/sso/registration-id");
|
|
@@ -663,6 +674,29 @@ public class Saml2LoginConfigurerTests {
|
|
|
|
|
|
}
|
|
|
|
|
|
+ @Configuration
|
|
|
+ @EnableWebSecurity
|
|
|
+ @EnableWebMvc
|
|
|
+ @Import(Saml2LoginConfigBeans.class)
|
|
|
+ static class CustomAuthenticationProviderConfig {
|
|
|
+
|
|
|
+ private final OpenSaml4AuthenticationProvider provider = spy(new OpenSaml4AuthenticationProvider());
|
|
|
+
|
|
|
+ @Bean
|
|
|
+ SecurityFilterChain web(HttpSecurity http) throws Exception {
|
|
|
+ http.authorizeHttpRequests((authorize) -> authorize.anyRequest().authenticated())
|
|
|
+ .saml2Login(Customizer.withDefaults());
|
|
|
+
|
|
|
+ return http.build();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Bean
|
|
|
+ AuthenticationProvider provider() {
|
|
|
+ return this.provider;
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
static class Saml2LoginConfigBeans {
|
|
|
|
|
|
@Bean
|