oauth2Login() - OpenID Connect 로그아웃
클라이언트는 로그아웃 엔드포인트를 사용하여 웹 브라우저에 대한 세션과 쿠키를 지운다.
클라이언트 로그아웃 성공 후
OidcClientInitiatedLogoutSuccessHandler를 호출하여 OpenID Provider 세션 로그아웃을 요청한다.OpenID Provider 로그아웃이 성공하면 지정된 위치로 리다이렉트 한다.
인가 서버 메타 데이터 사양에 있는 로그아웃 엔드포인트는
end_session_endpoint로 정의되어 있다.예 - keycloak :
end_session_endpoint=http://localhost:8080/realms/oauth2/protocol/openid-connect/logout

예제 코드
"/logout"으로 요청하면 스프링 시큐리티가 제공하는 기본 로그아웃 화면이 보이고, 로그아웃 버튼을 클릭하면 로그아웃이 수행되어LogoutFilter에서 처리된다.

먼저
CompositeLogoutHandler를 호출하여 내부적인 로그아웃 처리를 한다. (참고)그리고
logoutSuccessHandler를 호출하는데 이 클래스는 설정 클래스에서 설정한OidcClientInitiatedLogoutSuccessHandler이다.아무 설정 하지 않으면 기본값으로
SimpleUrlLogoutSuccessHandler로 설정된다.

OidcClientInitiatedLogoutSuccessHandler는 특별한 로그아웃 처리를 하는 것이 아니라end_session_endpoint에 해당하는 url을 찾아 리다이렉트 할 url을 만드는 역할을 한다.인가 서버로 만들어진 url로 인가 서버에 요청을 보내 로그아웃을 처리하게 하고,
setPostLogoutRedirectUri에서 설정한 uri로 리다이렉션 된다.이 uri는 인가 서버에도 등록이 되어 있어야 한다.
Oidc는 인증 기능이기 때문에 명확하게 로그아웃이 존재하는 것이 맞다. 따라서
OidcClientInitiatedLogoutSuccessHandler같은 클래스도 스프링 시큐리티에서 지원하는 것이다.반면 OAuth2는 인증이 아닌 인가 기능이기 때문에 로그아웃과는 개념이 맞지 않다. 그래서
Oauth2ClientInitiatedLogoutSuccessHandler같은 클래스는 존재하지 않는다.
Last updated