From eb3a621b17d5ae6561d9c0f9b53e36aafe4d07aa Mon Sep 17 00:00:00 2001 From: Orlando M Guerreiro Date: Tue, 3 Jun 2025 08:16:24 +0100 Subject: [PATCH] Added custom InMemory SAML2 Authentication Request Repository Added attributes mapping in application*.yml config Added attributes default values in application*.yml config Corrected MOCK-IDP to return InResponseTo and complex attribute names --- .../config/SecurityConfiguration.java | 8 + ...tSaml2AuthenticationRequestRepository.java | 86 ++++++++++ .../saml2/ResilientSaml2Properties.java | 22 +++ .../saml2/Saml2AuthenticationAttributes.java | 110 +++++++++++++ .../saml2/Saml2AuthenticationHandler.java | 152 +++++++++++++----- src/main/resources/config/application-dev.yml | 35 +++- src/main/resources/mock-idp/idp.js | 120 ++++++++++---- 7 files changed, 458 insertions(+), 75 deletions(-) create mode 100644 src/main/java/com/oguerreiro/resilient/repository/security/ResilientSaml2AuthenticationRequestRepository.java create mode 100644 src/main/java/com/oguerreiro/resilient/security/saml2/Saml2AuthenticationAttributes.java diff --git a/src/main/java/com/oguerreiro/resilient/config/SecurityConfiguration.java b/src/main/java/com/oguerreiro/resilient/config/SecurityConfiguration.java index 4909e58..ce677fb 100644 --- a/src/main/java/com/oguerreiro/resilient/config/SecurityConfiguration.java +++ b/src/main/java/com/oguerreiro/resilient/config/SecurityConfiguration.java @@ -18,8 +18,10 @@ import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configurers.HeadersConfigurer.FrameOptionsConfig; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.security.saml2.provider.service.authentication.AbstractSaml2AuthenticationRequest; import org.springframework.security.saml2.provider.service.metadata.OpenSamlMetadataResolver; import org.springframework.security.saml2.provider.service.registration.RelyingPartyRegistrationRepository; +import org.springframework.security.saml2.provider.service.web.Saml2AuthenticationRequestRepository; import org.springframework.security.saml2.provider.service.web.Saml2MetadataFilter; import org.springframework.security.saml2.provider.service.web.authentication.Saml2WebSsoAuthenticationFilter; import org.springframework.security.web.SecurityFilterChain; @@ -38,6 +40,7 @@ import org.springframework.security.web.util.matcher.OrRequestMatcher; import org.springframework.util.StringUtils; import org.springframework.web.servlet.handler.HandlerMappingIntrospector; +import com.oguerreiro.resilient.repository.security.ResilientSaml2AuthenticationRequestRepository; import com.oguerreiro.resilient.security.AuthoritiesConstants; import com.oguerreiro.resilient.security.saml2.Saml2AuthenticationHandler; import com.oguerreiro.resilient.security.saml2.Saml2ResponseLoggingFilter; @@ -70,6 +73,11 @@ public class SecurityConfiguration { return new BCryptPasswordEncoder(); } + @Bean + Saml2AuthenticationRequestRepository authenticationRequestRepository() { + return new ResilientSaml2AuthenticationRequestRepository(); + } + /** * For future knowledge in SAMLv2 config, its necessary to : *