프로젝트에서 JWT 토큰 인증과 HTTPS를 사용하면서 발생한 로그아웃 처리 이슈
🐛 로그아웃 설정 관련 코드
🛠️ 로그아웃 필터 관련 코드
프로젝트에서 세션 방식의 로그아웃 설정을 사용하였습니다. 그러나 이 설정은 세션만 삭제하고, JWT 토큰에 대한 로그아웃 처리를 수행하지 못했습니다.
또한, .logoutSuccessUrl("/") 설정은 HTTP 설정으로 동작하였습니다. 이로 인해 세션 로그아웃 후 HTTPS가 아닌 HTTP로 리다이렉트되어, HTTPS를 사용하는 이번 프로젝트에서 서버 오류가 발생하였습니다.
JWT 토큰 로그아웃 처리 문제: 세션 기반 로그아웃 처리는 세션을 삭제하는 것으로 로그아웃을 처리합니다. 하지만 JWT 토큰 인증 방식에서는 서버에 상태를 저장하지 않기 때문에 세션을 삭제하는 것만으로는 충분하지 않습니다. 따라서, JWT 토큰에 대한 별도의 로그아웃 처리가 필요합니다.
HTTPS 리다이렉트 문제: .logoutSuccessUrl("/") 설정은 HTTP를 기반으로 동작하기 때문에, HTTPS 프로토콜로 리다이렉트를 수행하지 않습니다. 이로 인해 HTTPS를 사용하는 프로젝트에서 서버 오류가 발생했습니다.
로그아웃 엔드포인트 설정: /api/logout 로그아웃 엔드포인트를 설정하여, 로그아웃 요청을 처리할 수 있도록 하였습니다.
로그아웃 필터 추가: JwtLogoutFilter 필터를 추가하여 JWT 토큰에 대한 로그아웃 처리를 수행하였습니다. 이 필터는 /api/logout 엔드포인트로 로그아웃 요청이 들어올 때마다 JWT 토큰을 무효화하는 역할을 합니다.
이번 문제는 JWT 토큰 인증과 HTTPS를 사용하는 환경에서 로그아웃 처리를 제대로 수행하지 못하는 문제였습니다. 이를 해결하기 위해 로그아웃 엔드포인트를 설정하고, JwtLogoutFilter 필터를 추가하여 JWT 토큰에 대한 로그아웃 처리를 수행하였습니다.
JWT 토큰 인증을 사용할 때는 세션 기반의 로그아웃 처리 방식만으로는 충분하지 않습니다. JWT 토큰에 대한 별도의 로그아웃 처리 방식을 구현해야 합니다.
로그아웃 후의 리다이렉트 설정은 프로토콜(HTTP/HTTPS)에 주의해야 합니다. HTTPS를 사용하는 환경에서는 HTTPS를 유지하는 리다이렉트 설정을 사용해야 합니다.