// Read explicitly configured allowed origins from service config.
- List<String> allowedOrigins = ConfigUtils.getCorsAllowedOrigins(serviceConfig);
+ List<String> allowedOrigins = new ArrayList<String>(ConfigUtils.getCorsAllowedOrigins(serviceConfig));
// Automatically add UI locations as allowed origins.
Map<String, CorsConfiguration> corsConfigurations = new LinkedHashMap<>();
if (relyingPartiesConfig != null) {
+ List<String> providerOrigins = new ArrayList<>();
+
for (final SAMLRelyingPartyType relyingPartyConfig : relyingPartiesConfig) {
String id = relyingPartyConfig.getId();
RelyingPartyRegistration registration = relyingPartyRegistrationRepository.findByRegistrationId(id);
String responseUrl = "/login/saml2/sso/" + id;
String providerOrigin = providerUrl.getProtocol() + "://" + providerUrl.getAuthority();
+ providerOrigins.add(providerOrigin);
+
configuration.setAllowedOrigins(allowedOrigins);
configuration.addAllowedOrigin(providerOrigin);
corsConfigurations.put(responseUrl, configuration);
}
}
+
+ if (ConfigUtils.isSAMLSingleLogoutEnabled(serviceConfig)) {
+ CorsConfiguration configuration = new CorsConfiguration();
+ String responseUrl = "/logout/saml2/sso";
+
+ configuration.setAllowedOrigins(allowedOrigins);
+
+ for (String providerOrigin : providerOrigins) {
+ configuration.addAllowedOrigin(providerOrigin);
+ }
+
+ if (maxAge != null) {
+ configuration.setMaxAge(maxAge);
+ }
+
+ configuration.setAllowedMethods(Arrays.asList(
+ HttpMethod.POST.toString()
+ ));
+
+ corsConfigurations.put(responseUrl, configuration);
+ }
}
return corsConfigurations;