Backend DEv

[Spring] 소셜 로그인 2편: 로그인과 로그아웃

  • -
728x90

* 수정중인 글입니다.

 

JWT를 통해 카카오 로그인을 구현해야 하는 상황이었다.

삽질 과정

아래는 노션에 작성해둔 백로그 내용중 일부이다.

JWT에 대한 개념 이해  -> 자체 로그인 구현 -> 소셜 로그인 구현 의 과정으로 하나씩 진행해보았고, 어떻게든 짜긴 했으나 여전히 spring security와 소셜 로그인 구현 과정에서의 여러 어려운 부분들을 많이 느껴 좋은 코드는 확실히 아니라는 느낌이 든다. 

특히 많은 블로그들의 글을 참조하여 구현하다 보니 코드가 엄청 헤진 느낌이다. 더 많은 공부를 하고 추후 리팩토링을 진행해보고 싶다.

JWT 인증 로그인 Flow

  1. [프론트] [카카오 API server]에 인가코드 요청
  2. [카카오 API server] 인가코드 발급 후 프론트로 return
  3. [프론트] 인가 코드 백으로 전달
  4. [백] 인가 코드 가지고 [카카오 API server]에서 access token 받아옴 (+구글 API server)
  5. [카카오 API server] 백에 access token 발급
  6. [백] access token으로 회원 정보 조회
  7. [백] 요청한 회원 정보가 백으로 들어옴 → 이 회원이 DB상에 존재하는 회원인지를 판단. 존재하지 않는다면 회원 정보를 DB에 저장
  8. [백] JWT 발행 (기존 사용자는 JWT 토큰 새로 발급)
  9. [백] 로그인 요청에 대한 응답 헤더에 JWT을 담아 프론트에게 보낸다.
  10. [프론트] JWT 토큰을 관리 (http-only-cookie)
  11. [프론트] JWT로 회원 정보 요청
  12. [백] 토큰 유효성 검사 후 회원정보 응답

추후 리팩토링

validate: AT를 재발급받을 필요가 없다면 상태 코드 OK(200)을 반환하고, 재발급받아야 한다면 401을 반환한다.

reissue: validate 요청으로부터 UNAUTHORIZED(401)을 반환받았다면, 프론트에서 Cookie와 Header에 각각 RT와 AT를 요청으로 받아서 authService.reissue를 통해 토큰 재발급을 진행한다. 토큰 재발급이 성공한다면 login과 마찬가지로 응답 결과를 보내고, 토큰 재발급이 실패했을때(null을 반환받았을 때) Cookie에 담긴 RT를 삭제하고 재로그인을 유도한다.

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.