IT

스프링 부트 및 SAML 2.0

itgroup 2023. 7. 2. 19:14
반응형

스프링 부트 및 SAML 2.0

SAML 2.0을 Spring Boot 기반 애플리케이션에 통합하는 방법이 있습니까?나는 나만의 SP를 구현하고 원격 IdP와 통신하고 싶습니다.

저는 최근에 이곳에서 이것을 위한 스프링 부트 플러그인을 출시했습니다.기본적으로 DSL 또는 구성 속성을 통해 보다 쉽게 구성할 수 있는 Spring Security SAML 주변의 래퍼입니다.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로 수행해야 합니다(깜짝, 깜짝).하지만 나머지는 방해가 되지 않아야 합니다. 그냥 스프링리, 부츠 같은 것들입니다. 예를 들어.

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

    // set up security filter chain here

}

저는 @vdenotaris의 솔루션을 시도했지만 현재의 스프링 부트에서 작동하지 않는 것 같아 그 접근 방식을 포기했습니다.

그래서 대체 솔루션으로 Shibboleth를 사용하여 모든 SAML 작업을 수행했습니다.mod_shib2apache httpd의 모듈, 다음을 사용하여 Tomcat 실행mod_jk(mod_instance_ajp를 사용할 수도 있음).Tomcat은 모든 필수 SAML 속성을 요청 속성으로 수신하며, 내부 인증을 외부에 연결하기 위해 idp와 사용자 ID만 일반 사용자 테이블에 저장하면 됩니다(SAML과 비밀번호 기반 인증이 모두 필요합니다).

언급URL : https://stackoverflow.com/questions/23150126/spring-boot-and-saml-2-0

반응형