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

Refresh Token 적용하기 #8

Closed
ucharles opened this issue Mar 13, 2022 · 3 comments
Closed

Refresh Token 적용하기 #8

ucharles opened this issue Mar 13, 2022 · 3 comments
Assignees
Labels
backend enhancement New feature or request help wanted Extra attention is needed

Comments

@ucharles
Copy link
Owner

현재 access token 의 유효 기간은 1시간으로 설정되어 있어 매우 짧다.
refresh token 을 도입하여, UX 편의성을 향상시키고자 한다.

시나리오

  1. 로그인을 하면 Access Token과 Refresh Token을 모두 발급한다.
    이때, Refresh Token만 서버측의 DB에 저장하며 Refresh Token과 Access Token을 쿠키(httpOnly, secure)에 저장한다.

  2. 사용자가 인증이 필요한 API에 접근하고자 하면, 가장 먼저 토큰을 검사하는 미들웨어를 검사한다.
    이때, 토큰을 검사함과 동시에 각 경우에 대해서 토큰의 유효기간을 확인하여 재발급 여부를 결정한다.

  • case1: access token과 refresh token 모두가 만료된 경우 -> 에러 발생
  • case2: access token은 만료됐지만, refresh token은 유효한 경우 -> access token 재발급
  • case3: access token은 유효하지만, refresh token은 만료된 경우 -> refresh token 재발급
  • case4: accesss token과 refresh token 모두가 유효한 경우 -> 다음 미들웨어로
  1. 로그아웃을 하면 Access Token과 Refresh Token을 모두 만료시킨다.

참조

https://cotak.tistory.com/102

@ucharles ucharles added enhancement New feature or request help wanted Extra attention is needed frontend backend labels Mar 13, 2022
@ucharles ucharles self-assigned this Mar 13, 2022
@ucharles
Copy link
Owner Author

ucharles commented Mar 13, 2022

@yypp1226 for frontend

�refresh token 도입을 위하여, backend 에서 이하의 내용을 변경하였습니다. 386fc78 ff622b2
가능하시다면 frontend 도 변경해주시면 감사하겠습니다.

현재

회원가입 시 바로 access token 을 발급, 로그인 처리 가능.

향후

회원가입 시 access token 을 발급하지 않게 됨. 반드시 로그인을 거쳐야 token 이 발급됨.

ucharles added a commit that referenced this issue Mar 13, 2022
path 추가, expires 추가, 로그인 여부를 판단하는 쿠키 추가
회원가입에서 cookie 를 발급하지 않게됨.
@ucharles ucharles removed the frontend label Mar 27, 2022
ucharles added a commit that referenced this issue Apr 1, 2022
- `logout` 전에 `checkAuth` 에서 토큰을 체크하고 있었음
- 이 탓에 쿠키에 `token`이 존재하지 않은 경우 403 error를 출력
- 이 수정으로 쿠키의 토큰 유무와 관련 없이 무조건 로그아웃 처리가 가능해짐
ucharles added a commit that referenced this issue Apr 3, 2022
- 리프레시 토큰 도입
- 토큰 검증을 위해 반드시 서버를 거쳐야 하므로, LoggedIn 쿠키를 �더이상 발행하지 않음
- accessToken의 만료기한은 1시간, refreshToken의 만료기한은 14일. refreshToken의 만료기한이 7일 이하로 남은 경우, 재발급
- **backend 환경변수 업데이트 필요**
@ucharles
Copy link
Owner Author

ucharles commented Apr 4, 2022

Fix: Backend, rewrite JWT exp time calculation 0e32efb

ucharles added a commit that referenced this issue Apr 4, 2022
backend API 문서 업데이트
- Refresh Token 업데이트 반영 #8
- event API의 URL을 수정
- logout API의 인증필요 여부를 "필요"에서 "필요 없음"으로 변경 #10
- POST 요청에 필요한 body 내용의 기재 방법을 변경
- invite API 추가 #13
- calendar의 관리자 권한 여부 획득 API 추가 #20
@ucharles
Copy link
Owner Author

ucharles commented Apr 5, 2022

Refresh Token 적용 완료. 향후 다른 이슈 발생 시 새로운 이슈로 관리 예정. Close.

@ucharles ucharles closed this as completed Apr 5, 2022
ucharles added a commit that referenced this issue Apr 10, 2022
- refresh token을 발급받은 상태에서, access token이 없는 경우 재발급하지 않고 로그아웃 시키는 오류를 수정
- find는 객체를 포함한 배열을 반환하고, findOne은 객체 하나를 반환함
- 배열의 index를 지정하지 않고 값을 사용하려 했기 때문에, undefined가 출력됨
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
backend enhancement New feature or request help wanted Extra attention is needed
Projects
None yet
Development

No branches or pull requests

1 participant