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를 사용함
작동 방식
- 사용자가 로그아웃 요청 (/logout)
- Spring Security는 OidcClientInitiatedLogoutSuccessHandler 실행
- 해당 handler는 end_session_endpoint로 redirect 요청 보냄
- 파라미터: id_token_hint, post_logout_redirect_uri
- 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
출처