Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

리프레시 토큰은 set-cookie로 설정하고 사용자 id값과 프로필 등록 여부에 대한 값을 추가한다. #64

Closed
4 tasks done
devFancy opened this issue Aug 19, 2023 · 0 comments · Fixed by #65
Assignees
Labels
기능 추가 새로운 기능 추가 리팩토링 코드 리팩토링 보안 인증/인가, 그 외 보안

Comments

@devFancy
Copy link
Member

devFancy commented Aug 19, 2023

구현할 기능

이전 #58 에서 구현한 기능이 제대로 동작되지 않아서, 해당 기능에 대해 다시 수행(+리팩터링)합니다.

  • 리프레시 토큰 값은 set-cookie로 설정한다.
  • 소셜 로그인/회원가입할 때, 사용자 id 값과 프로필 등록여부에 대한 값을 추가한다.
  • 로그아웃 기능 구현(로그아웃 시, 서버에서 accessToken과 refreshToken값을 만료시키는 부분을 추가한다)
  • accessToken 혹은 refreshToken이 유효하지 않는 경우 서버에서 401 에러 코드를 주도록 한다.

세부 작업 내용

수정 사항1

refreshToken를 set-cookie로 넘길 때 HttpOnly로 설정하는 방식은 사용하지 않습니다. /api/auth/token/access POST API 요청이 수정되어야 한다.

기존: 회원가입할 때 아래와 같이 body 부분에 accessToken 값과 refreshToken값이 나온다.

{
  "id": 0,
  "accessToken": "string",
  "refreshToken": "string"
}

변경: refreshToken은 Set-Cookie로 쿠키에 설정한다.

{
  "id": 0,
  "accessToken": "string",
}
  • AuthTokenResponseHandler 클래스를 생성해서 리프레시 토큰을 Set-Cookie 로 설정하는 메서드를 구현한다.
  • 토큰을 생성하는 AuthController 클래스에서 AuthTokenResponseHandler 클래스를 필드 값으로 선언한 뒤, createAuthToken 메서드에 클라이언트로 전달하는 부분인 authTokenResponseHandler.setRefreshTokenCookie(refreshToken);을 추가한다.
  • 기존 AuthController 클래스에서 Set-Cookie 설정과 관련된 로직을 삭제한다.

수정 사항2

기존 refreshToken을 body에 담아 accessToken을 요청하는 /api/auth/token/access POST API요청이 수정되어야 합니다. 따라서 아래와 같이 수정해야 한다.

{
  "id": number, // 사용자 id값 추가해야함
  "accessToken": "string",
  "refreshToken": "string" // <- 제거되어야 함. set-cookie 로 관리.
  "isProfileRegistered: boolean // 프로필 등록 여부에 대한 값 추가해야함
}

요청 사항1

로그아웃 시, 서버에서 accessToken과 refreshToken값을 만료시키는 부분이 추가되어야 한다.

  • 방법 1) /api/auth/token/access?logout=true
  • 방법 2) 새로운 api 추가 => 방법 2로 구현했습니다.

요청 사항2 & 3

accessToken이 유효하지 않는 경우 -> 에러코드 401 발생하도록 한다.

refreshToken이 유효하지 않는 경우 -> 에러코드 401 발생하도록 한다.

=> 해당 유효성 검사하는 메서드는 동일하기 때문에 하나의 작업으로 처리했습니다.

(예상) 소요 시간

소요 시간: 해당 수정 및 요청 사항들을 정리하는 시간 포함해서 4-5시간 소요될 것 같습니다.

참고 자료

@devFancy devFancy added 리팩토링 코드 리팩토링 기능 추가 새로운 기능 추가 보안 인증/인가, 그 외 보안 labels Aug 19, 2023
@devFancy devFancy self-assigned this Aug 19, 2023
@devFancy devFancy changed the title 소셜 로그인으로 회원가입할때 refreshToken은 set-cookie로 쿠키에 설정한다. 리프레시 토큰은 set-cookie로 설정하고 사용자 id값과 프로필 등록 여부에 대한 값을 추가한다. Aug 20, 2023
@devFancy devFancy moved this to In Progress in hibit-team Aug 20, 2023
@devFancy devFancy removed this from hibit-team Aug 20, 2023
@devFancy devFancy added this to the 소셜 로그인 milestone Aug 20, 2023
@devFancy devFancy pinned this issue Dec 22, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
기능 추가 새로운 기능 추가 리팩토링 코드 리팩토링 보안 인증/인가, 그 외 보안
Projects
None yet
1 participant