인프런 커뮤니티 질문&답변

literate_t님의 프로필 이미지
literate_t

작성한 질문수

스프링 시큐리티 OAuth2

OAuth2 로그인 구현 - OpenID Connect 로그아웃

oidcLogoutHandler 작성할 때의 질문입니다!

작성

·

356

1

안녕하세요.

oidcLogoutHandler()는 말 그대로 scope에 openid가 포함되어 open id 방식으로 인증했을 때의 로그아웃 처리인데요.

oauth2.0으로 로그인했을 때의 로그아웃 처리는 어떻게 하는지 궁금합니다. Oauth2ClientInitiatedLogoutSuccessHandler 같은 클래스는 없더라고요!

답변 2

2

정수원님의 프로필 이미지
정수원
지식공유자

OAuth 2 에서의 로그아웃은 강의 시점에서는 지원하지 않았는데 현재는 지원하는지 획인이 필요할 것 같습니다

사실 Oauth2 는 인증이 아닌 인가 기능이기 때문에 로그아웃 개념이 맞지 않는 부분이 있습니다

openid 는 인증 기능이라 명확하게 로그아웃이 존재하는것이 맞습니다

스프링 시큐리티 인가서버를 포함해서 로그아웃 기능이 oauth2 에서 지원하는지는 좀 더 확인이 필요할 것 같습니다

0

안녕하세요, 인프런 AI 인턴입니다.

Spring Security에서 OAuth 2.0을 사용하여 로그인한 사용자의 로그아웃 처리를 위해서는, OAuth 2.0 로그아웃 메커니즘을 직접 구현하거나, 기본 로그아웃 핸들러를 사용하여 세션을 무효화하고 필요한 경우 클라이언트 애플리케이션에서 추가적인 작업을 수행하도록 할 수 있습니다.

OidcClientInitiatedLogoutSuccessHandler는 OpenID Connect(oidc) 기반의 로그아웃을 위한 핸들러이며, OAuth2.0에는 별도의 고유한 로그아웃 핸들러가 명시되어 있지 않습니다. 대신, Spring Security가 제공하는 SimpleUrlLogoutSuccessHandlerLogoutSuccessHandler 인터페이스를 구현하여 필요에 맞게 커스터마이즈할 수 있습니다.

예를 들어, HttpSecurity 설정에서 .logout() 메서드를 사용하여 기본 로그아웃 처리를 설정하고, logoutSuccessHandler() 메서드를 이용하여 로그아웃 성공 시 수행할 작업을 지정할 수 있습니다.

Spring Security의 제네릭 로그아웃 처리 설정 예제입니다:

import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.web.authentication.logout.LogoutSuccessHandler;

// ...

public void configure(HttpSecurity http) throws Exception {
    http
        // ...
        .logout(logout -> logout
            .logoutUrl("/custom-logout") // 로그아웃 요청 URL 설정
            .logoutSuccessHandler(customLogoutSuccessHandler()) // 로그아웃 성공 처리 핸들러
            // 로그아웃 성공 후 리다이렉트될 URL 등 추가 설정 가능
        );
}

private LogoutSuccessHandler customLogoutSuccessHandler() {
    // 로그아웃 성공 처리 핸들러 구현
}

OAuth 2.0 클라이언트 구성과 관련된 정보는 OAuth 2.0 클라이언트 설정에 대한 Spring Boot 참조 문서에서 확인하실 수 있습니다:
Spring Boot Reference Documentation - OAuth2 Client

답변이 궁금증 해결에 도움이 되었으면 좋겠습니다, literate_t님. 추가적인 질문이 있다면 언제든 문의해 주세요.

literate_t님의 프로필 이미지
literate_t

작성한 질문수

질문하기