wake-up-neo.com

Spring Boot und SAML 2.0

Gibt es eine Möglichkeit, SAML 2.0 in eine Spring Boot-basierte Anwendung zu integrieren? Ich möchte mein eigenes SP implementieren und mit einem Remote-IdP kommunizieren.

13
vdenotaris

Ich habe ein Beispielprojekt implementiert, um zu zeigen, wieSpring Security SAML ExtensionmitSpring Bootintegriert wird.

Der Quellcode ist auf GitHub veröffentlicht: 

15
vdenotaris

Ich habe kürzlich ein Spring Boot-Plugin für dieses hier veröffentlicht. Es ist im Grunde ein Wrapper um Spring Security SAML, der eine einfachere Konfiguration über DSL- oder Konfigurationseigenschaften ermöglicht. Hier ist ein Beispiel mit der DSL:

@SpringBootApplication
@EnableSAMLSSO
public class SpringBootSecuritySAMLDemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringBootSecuritySAMLDemoApplication.class, args);
    }

    @Configuration
    public static class MvcConfig extends WebMvcConfigurerAdapter {

        @Override
        public void addViewControllers(ViewControllerRegistry registry) {
            registry.addViewController("/").setViewName("index");
        }
    }

    @Configuration
    public static class MyServiceProviderConfig extends ServiceProviderConfigurerAdapter {
        @Override
        public void configure(ServiceProviderSecurityBuilder serviceProvider) throws Exception {
            serviceProvider
                .metadataGenerator()
                .entityId("localhost-demo")
            .and()
                .sso()
                .defaultSuccessURL("/home")
                .idpSelectionPageURL("/idpselection")
            .and()
                .logout()
                .defaultTargetURL("/")
            .and()
                .metadataManager()
                .metadataLocations("classpath:/idp-ssocircle.xml")
                .refreshCheckInterval(0)
            .and()
                .extendedMetadata()
                .idpDiscoveryEnabled(true)
            .and()
                .keyManager()
                .privateKeyDERLocation("classpath:/localhost.key.der")
                .publicKeyPEMLocation("classpath:/localhost.cert");

        }
    }
}

Das ist im Grunde der Code, den Sie brauchen.

7
Ulises

Sie müssten alle SAML-Sachen in XML machen (Überraschung, Überraschung). Aber der Rest sollte nicht im Weg stehen, nur Standard Springy, Booty Zeug, z.

@EnableAutoConfiguration
@Configuration
@ImportResource("my-crazy-ass-saml.xml")
public class Application implements WebMvcSecurityAdapter {

    // set up security filter chain here

}
3
Dave Syer

Ich habe die Lösung von @vdenotaris ausprobiert, scheint aber nicht mit dem aktuellen Spring-Boot zu funktionieren, und gab diesen Ansatz daher auf.

Als alternative Lösung habe ich Shibboleth verwendet, um das gesamte SAML-Material mit dem mod_shib2-Modul in Apache httpd zu erledigen und Tomcat mit mod_jk auszuführen (mod_proxy_ajp könnte auch verwendet werden) hinter der Apache-Instanz. Tomcat erhält alle erforderlichen SAML-Attribute als Anforderungsattribute, und ich muss nur das idp und die Benutzer-ID in der regulären Benutzertabelle speichern, um die interne Authentifizierung mit der externen zu verbinden (ich benötige sowohl SAML als auch kennwortbasierte Authentifizierung).

1
P.Péter

Ich würde empfehlen, die Spring SAML-Erweiterung zu überprüfen

0