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
출처
'Spring > Spring Security' 카테고리의 다른 글
[Spring Security] 7-2. OAuth2 Client: Authorization Grant Support (3) | 2025.07.19 |
---|---|
[Spring Security] 7-1. OAuth2 Client: Core Interfaces and Classes (0) | 2025.07.18 |
[Spring Security] 6-3. OAuth2 Login: Advanced Configuration (0) | 2025.07.17 |
[Spring Security] 6-2. OAuth2 Login: Core Configuration (1) | 2025.07.15 |
[Spring Security] 6-1. OAuth2 (0) | 2025.07.13 |