필터 등록
/saml/config/WebSecurityConfig.java:87
@Bean
public FilterChainProxy samlFilter() throws Exception {
List<SecurityFilterChain> chains = new ArrayList<>();
// IDP에 등록한 Recipient URL and Destination URL로 인증 프로세스를 위한 필터
chains.add(new DefaultSecurityFilterChain(new AntPathRequestMatcher("/saml/SSO/**"),
samlWebSSOProcessingFilter()));
// 등록한 IDP discovery를 위한 url
chains.add(new DefaultSecurityFilterChain(new AntPathRequestMatcher("/saml/discovery/**"),
samlDiscovery()));
// saml2.0 인증을 위한 entry point 설정 /saml/login url로 인증을 시작한다.
chains.add(new DefaultSecurityFilterChain(new AntPathRequestMatcher("/saml/login/**"),
samlEntryPoint));
// logout 용 필터
chains.add(new DefaultSecurityFilterChain(new AntPathRequestMatcher("/saml/logout/**"),
samlLogoutFilter));
chains.add(new DefaultSecurityFilterChain(new AntPathRequestMatcher("/saml/SingleLogout/**"),
samlLogoutProcessingFilter));
return new FilterChainProxy(chains);
}
application.properties 설정 내용
application.properties
saml.keystore.location=classpath:/saml/samlKeystore.jks
# Password for Java keystore and item therein
saml.keystore.password=nalle123
saml.keystore.alias=apollo
# SAML Entity ID extracted from top of SAML metadata file
# skkkms@naver.com/kim*******
# https://developer.okta.com/signup/
saml.idp=http://www.okta.com/exk4zqiuc310vWv5u5d7
saml.sp=okta
spring.main.allow-circular-references=true
인증 후 실행할 Handler 등록
/saml/config/SamlSecurityConfig.java:177
@Bean
@Qualifier("saml")
public SavedRequestAwareAuthenticationSuccessHandler successRedirectHandler() {
// 인증 성공시 호출되는 핸들러. 성공후 /home 으로 가도록 설정되어있다.
SavedRequestAwareAuthenticationSuccessHandler successRedirectHandler = new SavedRequestAwareAuthenticationSuccessHandler();
successRedirectHandler.setDefaultTargetUrl("/home");
return successRedirectHandler;
}
@Bean
@Qualifier("saml")
public SimpleUrlAuthenticationFailureHandler authenticationFailureHandler() {
// 인증 실패시 호출되는 핸들러. 실패 시 /error 으로 가도록 설정되어있다.
SimpleUrlAuthenticationFailureHandler failureHandler = new SimpleUrlAuthenticationFailureHandler();
failureHandler.setUseForward(true);
failureHandler.setDefaultFailureUrl("/error");
return failureHandler;
}
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(securedEnabled = true)
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Value("${saml.sp}")
private String samlAudience;
//samAudiences는 메타데이터의 EntityId로서 okta에서 등록한 audince 명과 동일해야 인증 받을수
...
public MetadataGenerator metadataGenerator() {
MetadataGenerator metadataGenerator = new MetadataGenerator();
metadataGenerator.setEntityId(samlAudience);
metadataGenerator.setExtendedMetadata(extendedMetadata);
metadataGenerator.setIncludeDiscoveryExtension(false);
metadataGenerator.setKeyManager(keyManager);
return metadataGenerator;
}
'Backend Development > Spring boot' 카테고리의 다른 글
[Spring Boot] swagger ui HTML문서로 출력하기 (1) | 2022.06.22 |
---|---|
[Spring boot] Spring Security login 예제 (filter 없이 수동 Autentication) (0) | 2022.05.22 |
[Spring boot] authenticationEntryPoint /auth (0) | 2022.05.12 |
[Spring boot] SAML2.0 SSO 간단 정리 (0) | 2022.05.10 |
[Spring boot] OAuth2 login(Google, Facebook, Naver, Kakao) (0) | 2022.03.15 |