web-dev-qa-db-ja.com

Spring BootとSAML 2.0

Spring BootベースのアプリケーションにSAML 2.0を統合する方法はありますか?自分のSPを実装し、リモートIdPと通信したい。

15
vdenotaris

Spring Security SAML Extensionを統合する方法を示すためにサンプルプロジェクトを実装しました スプリングブート

ソースコードはGitHubで公開されています:

21
vdenotaris

私は最近、このためのSpring Bootプラグインをリリースしました here 。これは基本的に、Spring Security SAMLのラッパーであり、DSLまたは構成プロパティを介して、より使いやすい構成を可能にします。 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");

        }
    }
}

基本的に必要なコードはこれだけです。

13
Ulises

すべてのSAMLをXMLで行う必要があります(驚き、驚き)。しかし、残りは邪魔にならず、標準のSpringy、Bootyのものだけです。

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

    // set up security filter chain here

}
3
Dave Syer

私は@vdenotarisの解決策を試しましたが、現在のスプリングブートでは機能しないようで、そのアプローチをあきらめました。

代替ソリューションとして、私はシボレスを使用して、Apache httpdのmod_shib2モジュールを使用してすべてのSAMLを行い、mod_jkを使用してTomcatを実行しました(mod_proxy_ajpも使用できます)。 Tomcatは必要なすべてのSAML属性をリクエスト属性として受け取り、内部認証を外部に接続するために通常のユーザーテーブルにidpとユーザーIDを保存するだけです(SAMLとパスワードベースの認証の両方が必要です)。

1
P.Péter

Spring SAML拡張機能 を確認することをお勧めします

0