https://megamaker.tistory.com/298
[Spring Cloud][4] JWT, OAuth2로 로그인 하기
개요 이번 프로젝트는 MSA 구조에 대해서 공부하는 것뿐만 아니라 여러 최적화도 적용해보기로 했기 때문에 서버측에 부담이 덜 갈 수 있도록 JWT를 이용하기로 했다. 일단 액세스 토큰만 구현
megamaker.tistory.com
저번 로그인에 이어서 이번에는 로그아웃을 구현해보았다. 딱히 서버에서 세션을 사용하는 것이 아니어서 처리 로직은 그냥 토큰이 저장되어 있는 쿠키를 없애면 된다.
쿠키 만료시키기
gateway-service 수정

우선 gateway-service에서 로그아웃을 위한 경로를 지정한다. 로그인한 상태에서만 접근 가능하도록 필터를 적용했다. 필터명은 전에는 Header였는데 이전 프로젝트에서 사용하던걸 가져와서 고치다 보니 수정을 못했었다. 이제는 헤더를 검증하는 것이 아닌 쿠키를 가져와 검증하기 때문에 Cookie로 이름을 바꿔주었다.
login-service 수정

Spring Security의 formLogin을 사용하면 logout 관련 설정을 통해 세션에서 접속 정보를 제거할 수 있지만 현재는 상황이 다르다보니 딱히 떠오르는 방법도 없고 어차피 로그인 서비스 프로젝트이니 로그아웃 과정을 컨트롤러에서 작성하기로 했다. 쿠키를 새로 만들고 유효시간을 0으로 설정하여 비활성화한다. 마지막으로 메인화면으로 리다이렉트시킨다. referer를 이용하여 이전 경로로 보내는 방법도 있지만 조작이 가능할 수도 있어서 웬만하면 사용하지 않기로 했다.
이 상태로 그냥 실행하면 cors 에러 때문에 로그아웃을 할 수 없었다. 그래서 다음과 같은 cors 설정을 만들었다.
@Component
public class CustomCorsConfig implements CorsConfigurationSource {
@Override
public CorsConfiguration getCorsConfiguration(HttpServletRequest request) {
CorsConfiguration corsConfig = new CorsConfiguration();
corsConfig.setAllowedOrigins(List.of("http://localhost:8000"));
corsConfig.setAllowedMethods(List.of("GET", "POST", "PUT", "PATCH", "DELETE"));
corsConfig.setAllowedHeaders(List.of("*"));
return corsConfig;
}
}
기본적인 검증은 이미 게이트웨이에서 할테니 게이트웨이에서 오는 요청은 그냥 모두 받아들이도록 했다.

filterChain 설정에서 cors 설정 클래스를 적용시켜주면 된다.

추가로 /logout로 요청했을 때 서비스 계층에서 해결해야 되는 요청을 시큐리티 필터에서 가로채버려서 시큐리티에서 제공하는 로그아웃을 비활성화 시켰다.
로그아웃 관련
https://developers.naver.com/docs/login/api/api.md
네이버 로그인 API 명세 - LOGIN
네이버 로그인 API 명세 네이버 로그인 API는 네이버 로그인 인증 요청 API, 접근 토큰 발급/갱신/삭제 요청API로 구성되어 있습니다. 네이버 로그인 인증 요청 API는 여러분의 웹 또는 앱에 네이버
developers.naver.com

네이버쪽만 보긴했지만 일단 로그아웃은 자체적으로만 구현할 수 있다. 회원 탈퇴의 경우는 밑의 로그인 연동 해제 요청을 하면 되는 것 같다. 설명을 잘못 읽어서 로그아웃을 할 때 필요한 과정이라고 생각해 구현하고 있었는데 뭔가 이상해서 다시 보니 연동 해제였다... ㅇ.ㅇ;;
'공부 > Spring Cloud' 카테고리의 다른 글
| [Spring Cloud][7] config-service 추가 및 설정 대칭키 암호화 (0) | 2024.05.10 |
|---|---|
| [Spring Cloud][6] Store 마이크로 서비스 구현하기 1 (0) | 2024.05.06 |
| [Spring Cloud][4] JWT, OAuth2로 로그인 하기 (0) | 2024.05.03 |
| [Spring Cloud][3] User 마이크로 서비스 구현하기 1 (1) | 2024.04.28 |
| [Spring Cloud] Kafka cluster와 H2 포트 충돌 해결하기 (0) | 2024.04.08 |