Есть ли способ интегрировать SAML 2.0 в приложение Spring Boot-based? Я хотел бы реализовать свой собственный SP и общаться с удаленным IdP.
Spring Загрузка и SAML 2.0
Ответ 1
Я реализовал образец проекта, чтобы показать, как интегрировать Spring Расширение SAML безопасности с Spring Загрузка.
Исходный код опубликован в GitHub:
Ответ 2
Недавно я выпустил загрузочный плагин spring для этого здесь. Это в основном оболочка вокруг spring 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");
}
}
}
Это в основном весь код, который вам нужен.
Ответ 3
Вам нужно будет делать все материалы SAML в XML (удивление, удивление). Но все остальное не должно мешать, просто стандартный Springy, Booty stuff, например.
@EnableAutoConfiguration
@Configuration
@ImportResource("my-crazy-ass-saml.xml")
public class Application implements WebMvcSecurityAdapter {
// set up security filter chain here
}
Ответ 4
Я попробовал решение @vdenotaris, но, похоже, не работает с текущим spring -boot и, таким образом, отказался от этого подхода.
Итак, в качестве альтернативного решения я использовал shibboleth для создания всего материала SAML с помощью модуля mod_shib2
в apache httpd и запустил tomcat с помощью mod_jk
(mod_proxy_ajp также можно было использовать) за указанным экземпляром apache. Tomcat получает все необходимые атрибуты SAML в качестве атрибутов запроса, и мне нужно хранить idp и идентификатор пользователя в таблице обычного пользователя, чтобы подключить внутреннюю аутентификацию к внешнему (мне нужны как SAML, так и аутентификация на основе пароля).
Ответ 5
Я бы рекомендовал проверить расширение Spring SAML