뭔가 좀 꽃히면 뒤도 안돌아보고 돌진하는 스타일이라 다 만들어 놓고 깨달았는데 OAuto2부터 인증 받고 JWT를 해야되는데 이거 망한건 아닌가 잘 모르겠네;;
여튼 간에 어떤 방식인지 정리부터 필요할 것 같다.
사족이긴 한데 이미한걸 뭐 어떡하겠냐 일단 넣어봐야지.
JWT와 OAuto2인증을 함께 사용할 때 장점
- OAuth2를 통해 외부 제공자의 인증을 신뢰할 수 있고,
- JWT를 통해 이후 요청에 대해 별도의 인증 절차 없이 사용자 인증이 가능합니다.
- 서버가 세션을 관리할 필요가 없으니 Stateless 환경에서 유리합니다.
근데 생각해보면 내 사이트는 Stateless하지는 않을 것 같단 말이지? 그럼 보안 강화를 목적에 두고 로그인을 할 때 만 JWT와 OAuto2 인증 둘 다 사용하고 이후에는 JWT는 버리고 OAuto2의 세션 유지를 사용하는게 더 적합할 듯 하다.
그래서 어떻게 동작할건데?
- 로그인 시 OAuth2 + JWT 발급:
- 사용자가 OAuth2 제공자를 통해 로그인하고, 서버가 JWT를 발급해서 클라이언트에 반환함.
- 이 과정에서 JWT는 주로 처음 로그인 인증을 위해 사용되고, 이후 서버는 사용자 세션을 유지하기 위한 세션 쿠키를 사용할 수 있음.
- 이후 요청에서는 JWT 사용하지 않음:
- 로그인이 완료된 후, 서버는 세션을 통해 인증된 사용자를 식별하고 관리함.
- 세션 기반으로 작동하므로 서버는 각 요청마다 클라이언트가 제공하는 세션 정보를 바탕으로 사용자를 인증함. 이때 JWT는 필요없음.
이 일단 계획이다.
일단 OAuto2 관련 기본적인 설정은 애진작에 다 해놨었기 때문에 handler로 JWT를 받급 받아 전달하는 로직부터 시작해보자.
때문에 변동 사항은
- OAuth2AuthenticationSuccessHandler 도입으로 토큰 전송
- JwtAuthenticationFilter 도입으로 서비스와 JWT 검증 로직 명확하게 분리
- 더이상 login.jsp 에서 idToken 전달하지 않고 OAuth2에서 토큰을 가져옴.
이게 제일 중요한 변동사항이다.
그래서 지금 일단 다 해놓고 프론트에서 OAuth2로 전달하게끔 하려고 하는데 엑세츠 차단됨이 뜨는걸 보니, 다시 설정들어가서 url등록을 하고 와야될 것 같다.
이 주소가 처리하는 주소였는데 여태 따로 만들어서 하려니 힘들었지.. 이래서 글을 똑바로 읽었어야했다. 여튼간에 이 주소가http://localhost:8081/login/oauth2/code/google
이렇게 치환되니, 이 주소로 등록을 하고 와보자고.
등록하고난 이후 로그인 시도를 해봤다.
일단은 만들어 놓은 로직까지 도달하는거 보니까 여기서 제대로 토큰 추출만 하면 될 것 같다.
아니다!!! 다른 로그까지 다 찬찬히 살펴보니까 회원가입 시키는 로직에서도 null을 반환하고 있고 여러가지로 문제가 조금 있다. 크게 전면적으로 수정을 거칠 필요가 있어보인다.
CustomOAuth2UserService
클래스를 선언해줘서 기존의 firebaseUserService
의 역할을 하도록 수정했다.
그리고 CustomOAuth2User
로 Member Entity에 전달해주도록 했다.
그래서 firebaseUserService
와 firebaseUserController
는 제 역할을 하지 못하게 되니 코드만 지우고 클래스는 남겼다. (나중에 파일 업로드 다운로드 할 때 혹시나 해서 그냥 메서드들만 지웠다.)
일단 이렇게 하고 DB초기화 이후 로그인 시도를 해봤다.
오케이!!! DB에 정상적으로 들어오고 메인 페이지 리다이렉트까지 됐다.
로그를 살펴봤을 때, JWT와 OAuth2가 유기적으로 잘 작동한다..
다행이다. 이제 세션문제만 해결하면 될 것 같다.
그건 다음 포스팅으로 하겠다.
'Coding History > project' 카테고리의 다른 글
스포티파이 API 적용하기 시작! (로그인 부터) (1) | 2024.09.19 |
---|---|
OAuth2 로그인 후, 세션 관리. (axios를 사용해 헤더로 토큰 전송)->인 줄 알았으나 결론은 Google OAuth2 로그인 간소화 (5) | 2024.09.17 |
로컬 로그인 폐기. 및 구글로그인 (JWT 발급 및 로직 통과 구현) (1) | 2024.09.13 |
구글 로그인과 로컬 로그인 세션 관리 (시큐리티를 통한) (3) | 2024.09.12 |
리액트. React 겉햝기 시작 (1) | 2024.09.10 |