Spring/Spring Security

[Spring Security] 6-4. OAuth2 Login: OIDC Logout

noahkim_ 2025. 7. 18. 10:36

1. Local Logout

2. OpenID Connect 1.0 Client-Initiated Logout

  • client가 사용자의 로그아웃을 OpenID Provider까지 전달하는 방식
  • Discovery + Session Management를 지원하는 OP만 가능
  • issuer-uri 설정을 통해 end_session_endpoint 자동 획득
  • OidcClientInitiatedLogoutSuccessHandler를 사용함

 

작동 방식

  1. 사용자가 로그아웃 요청 (/logout)
  2. Spring Security는 OidcClientInitiatedLogoutSuccessHandler 실행
  3. 해당 handler는 end_session_endpoint로 redirect 요청 보냄
    • 파라미터: id_token_hint, post_logout_redirect_uri
  4. Provider(OP)는 세션 종료 후 post_logout_redirect_uri로 리디렉션

 

설정

더보기
@Configuration
@EnableWebSecurity
public class OAuth2LoginSecurityConfig {

	@Autowired
	private ClientRegistrationRepository clientRegistrationRepository;

	@Bean
	public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
		http
			.authorizeHttpRequests(authorize -> authorize
				.anyRequest().authenticated()
			)
			.oauth2Login(withDefaults())
			.logout(logout -> logout
				.logoutSuccessHandler(oidcLogoutSuccessHandler())
			);
		return http.build();
	}

	private LogoutSuccessHandler oidcLogoutSuccessHandler() {
		OidcClientInitiatedLogoutSuccessHandler handler =
			new OidcClientInitiatedLogoutSuccessHandler(this.clientRegistrationRepository);

		// 로그아웃 후 리디렉션할 URI (기본값은 {baseUrl})
		handler.setPostLogoutRedirectUri("{baseUrl}");

		return handler;
	}
}
  • setPostLogoutRedirectUri(...): 로그아웃 후 이동할 리디렉션 URL을 지정.

 

3. OpenID Connect 1.0 Back-Channel Logout

  • OP에서 사용자의 로그아웃이 발생했을 때, 등록된 모든 RP(클라이언트) 직접 POST 요청으로 logout_token을 보내서 세션 무효화를 요청하는 기능

 

Back-Channel Logout Architecture

Customizing the Session Logout Endpoint

Customizing the Session Logout Cookie Name

Customizing the OIDC Provider Session Registry

 


출처