Spring BootベースのアプリケーションにSAML 2.0を統合する方法はありますか?自分のSPを実装し、リモートIdPと通信したい。
Spring Security SAML Extensionとを統合する方法を示すためにサンプルプロジェクトを実装しました スプリングブート。
ソースコードはGitHubで公開されています:
私は最近、このための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");
}
}
}
基本的に必要なコードはこれだけです。
すべてのSAMLをXMLで行う必要があります(驚き、驚き)。しかし、残りは邪魔にならず、標準のSpringy、Bootyのものだけです。
@EnableAutoConfiguration
@Configuration
@ImportResource("my-crazy-ass-saml.xml")
public class Application implements WebMvcSecurityAdapter {
// set up security filter chain here
}
私は@vdenotarisの解決策を試しましたが、現在のスプリングブートでは機能しないようで、そのアプローチをあきらめました。
代替ソリューションとして、私はシボレスを使用して、Apache httpdのmod_shib2
モジュールを使用してすべてのSAMLを行い、mod_jk
を使用してTomcatを実行しました(mod_proxy_ajpも使用できます)。 Tomcatは必要なすべてのSAML属性をリクエスト属性として受け取り、内部認証を外部に接続するために通常のユーザーテーブルにidpとユーザーIDを保存するだけです(SAMLとパスワードベースの認証の両方が必要です)。
Spring SAML拡張機能 を確認することをお勧めします