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

accessToken 만료 시 refreshToken을 이용하여 accessToken 재발급하라 #62

Merged
merged 7 commits into from
Sep 18, 2023

Conversation

jihwooon
Copy link
Owner

@jihwooon jihwooon commented Sep 18, 2023

요약 (Summary)

access token이 만료됐을 경우 프론트에서 저장하고 있던 refresh token을 이용하여 api 서버에서 access token을 재발급할 수 있
습니다.
프론트에서 Authorization Header에 refresh token을 담아서 전송하며 서버에서는 해당 값이 유효한지 검증을 합니다.
전달 받은 refresh token을 가지고 있는 회원이 있는지 찾습니다.
만약 유효한 refresh token이 없다면 memberService.findMemberByRefreshToken 메소드를 호출할 때 예외를 발생시킵니다.
refresh token이 존재하고 만료도 안됐으면 access token을 생성해서 반환합니다
해당 refresh token이 없거나 refresh token이 만료된 경우는 예외를 발생시킵니다.

배경 (Background)

access token이 만료가 되면 재발급을 해야 합니다. 그러기 위해서는 DB(데이터베이스)에 refresh token이 있는지 없는지를 확인합니다
존재 하지 않으면 예외를 던집니다.

계획 (Plan)

  1. accessToken이 만료 시 프론트에서 refresh token을 POST /auth/token으로 api를 요청합니다
  2. 해당 회원이 refresh token이 있는지를 데이터베이스에서 확인합니다
  3. 만약 refresh token이 존재하지 않으면 예외를 던져 토큰이 없다는 것을 알려줍니다.
  4. refresh token이 존재하고 refresh token 만료 시간이 만료가 안 되면 access token을 발급합니다.
  5. refresh token 만료 시간이 만료가 되었으면 예외를 던집니다.

accesstoken재발급 (1)

참고 사항

@jihwooon jihwooon changed the title Issue 41 accessToken 만료 시 refresh token을 이용하여 access token 재발급하라 Sep 18, 2023
@jihwooon jihwooon force-pushed the issue-41 branch 5 times, most recently from 242738f to e35858a Compare September 18, 2023 09:16
refresh token으로 데이터베이스에 사용자 정보를 가져올 수 있습니다
refresh token으로 회원 정보를 가져옵니다
refresh token의 회원 이메일 정보를 accessToken과 accessToken 만료시간을 발급을 합니다
@jihwooon jihwooon changed the title accessToken 만료 시 refresh token을 이용하여 access token 재발급하라 accessToken 만료 시 refreshToken을 이용하여 accessToken 재발급하라 Sep 18, 2023
Comment on lines +18 to +21
const HEADERS = {
authorization:
'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJwYXlsb2FkIjoxLCJpYXQiOjE2OTQ1MjI0NzUsImV4cCI6MTY5NTczMjA3NSwic3ViIjoiUkVGUkVTSCJ9.A2PfZdj91q6MIapXrvTB6bUd7blhqrrDY2yh0eYdGPY',
}
Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

headers 테스트는 object형태에 authorization 속성을 선언해야만 테스트가 가능합니다

server/src/auth/token/web/token.controller.test.ts Outdated Show resolved Hide resolved
const member = await this.memberRepository.findMemberByRefreshToken(refreshToken)

if (!member) {
throw new RefreshTokenNotFoundException('Refresh Token 정보를 찾을 수 없습니다')
Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

RefreshTokenNotFoundException은 토큰이 존재 않을 때 발생하는 에러이지만 현재 refreshToken으로 불러오는 정보는 Member 정보로 MemberNotFoundException이 올바르다고 판단이 됩니다

}

if (member.tokenExpirationTime < now) {
throw new RefreshTokenExpiredException('Refresh Token 만료 시간이 지났습니다')
Copy link
Owner Author

@jihwooon jihwooon Sep 18, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

TokenExpriedException('Token이 만료되었습니다 ')

@jihwooon jihwooon force-pushed the issue-41 branch 2 times, most recently from 8639f44 to cf14800 Compare September 18, 2023 16:31
현재 시간이 refresh token 만료시간을 넘으면 RefreshTokenNotFoundException 예외를 던집니다
만료 시간이 넘지 않으면 accessToken을 발급합니다
프론트 header에 담긴 RefreshToken을 담아 서버에 유효한 값인지 아닌지 검증을 합니다.
전달 받은 RefreshToken를 서버로 전달합니다
올바른 토큰인지 아닌지 검증하는 validateToken 메서드를 추가했습니다
@jihwooon jihwooon merged commit a2183b9 into main Sep 18, 2023
1 check passed
@jihwooon jihwooon deleted the issue-41 branch September 18, 2023 16:50
@jihwooon jihwooon self-assigned this Sep 18, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

accessToken 만료 시 refresh token을 이용하여 access token 재발급하라
1 participant