web-dev-qa-db-fra.com

Spring Boot et SAML 2.0

Existe-t-il un moyen d’intégrer SAML 2.0 dans une application Spring Boot? J'aimerais mettre en œuvre mon propre SP et communiquer avec un fournisseur d'identité à distance.

13
vdenotaris

J'ai implémenté un exemple de projet afin de montrer comment intégrerExtension SAML de Spring SecurityavecSpring Boot.

Le code source est publié sur GitHub: 

15
vdenotaris

J'ai récemment publié un plugin de démarrage de printemps pour ce ici . Il s'agit essentiellement d'un wrapper autour de Spring Security SAML qui permet une configuration plus conviviale via un DSL ou des propriétés de configuration. Voici un exemple utilisant le 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");

        }
    }
}

C'est fondamentalement tout le code dont vous avez besoin.

7
Ulises

Vous devez faire tous les trucs SAML en XML (surprise, surprise). Mais le reste ne devrait pas gêner, juste des choses standard comme Springy, Booty, par exemple.

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

    // set up security filter chain here

}
3
Dave Syer

J'ai essayé la solution de @vdenotaris, mais ne semble pas fonctionner avec la version actuelle de Spring-Boot et j'ai donc abandonné cette approche.

Donc, en tant que solution alternative, j'ai utilisé shibboleth pour effectuer tout le travail SAML en utilisant le module mod_shib2 dans Apache httpd, puis exécuter Tomcat en utilisant mod_jk (mod_proxy_ajp pourrait également être utilisé) derrière ladite instance Apache. Tomcat reçoit tous les attributs SAML requis en tant qu'attributs de demande et je n'ai qu'à stocker l'idp et l'ID utilisateur dans la table des utilisateurs normaux pour connecter l'authentification interne à l'externe (j'ai besoin d'une authentification SAML et d'un mot de passe).

1
P.Péter

Je recommanderais de vérifier l'extension Spring SAML extension

0
Stefan Rasmusson