Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
이 주의 과제 📕
회원 가입시 access token과 함꼐 refresh token 반환하는 로직
Token
elive7/practice/src/main/java/opt/sopt/practice/auth/rds/domain/Token.java
Lines 11 to 31 in a7a0450
refreshToken을 redis에 저장하기 위해, token 클래스를 정의해두었습니다.
TokenRepository
elive7/practice/src/main/java/opt/sopt/practice/auth/rds/repository/TokenRepository.java
Lines 7 to 11 in a7a0450
CrudRepository를 상속받아 토큰을 저장하기 위한 레포지토리를 만들어주었습니다.
JwtTokenProvider
elive7/practice/src/main/java/opt/sopt/practice/common/jwt/JwtTokenProvider.java
Lines 39 to 41 in a7a0450
elive7/practice/src/main/java/opt/sopt/practice/common/jwt/JwtTokenProvider.java
Lines 60 to 73 in a7a0450
JwtTokenProvider에 refreshToken을 생성하고, authentication에 따라 발행하는 로직을 작성해주었습니다.
elive7/practice/src/main/java/opt/sopt/practice/common/jwt/JwtTokenProvider.java
Lines 28 to 29 in 110788f
이때 accessToken과 refreshToken의 만료 시간을 각각 5분과 14일로 설정하여, accessToken이 만료되더라도 refreshToken으로 새 accessToken을 받아올 수 있도록 하였습니다.
UserJoinResponse과 MemberService
elive7/practice/src/main/java/opt/sopt/practice/service/dto/UserJoinResponse.java
Lines 3 to 17 in 110788f
elive7/practice/src/main/java/opt/sopt/practice/service/MemberService.java
Lines 28 to 48 in 110788f
UserJoinResponse에 refreshToken을 추가하고, MemberService에서도 회원가입시 Refresh Token을 생성 및 레포지토리에 저장한 후 응답으로도 Refresh Token를 돌려주는 로직을 추가해주었습니다.
access token 만료시 메세지 반환하는 로직
JwtAuthenticationFilter
elive7/practice/src/main/java/opt/sopt/practice/auth/filter/JwtAuthenticationFilter.java
Lines 45 to 54 in 110788f
JWT_ACCESS_TOKEN_EXPIRED_EXCEPTION 이라는 에러 메세지를 만든 후, JwtAuthenticationFilter에서 accessToken이 이미 만료되었다면, JWT_ACCESS_TOKEN_EXPIRED_EXCEPTION에 대한 응답을 리턴할 수 있도록 다음과 같은 코드를 작성해주었습니다.
refresh token으로 access token 반환하는 로직
TokenController
elive7/practice/src/main/java/opt/sopt/practice/auth/rds/controller/TokenController.java
Lines 15 to 26 in 4b2d7f4
헤더에 refreshToken을 담아서 특정 url로 요청을 보내면, accessToken을 재발급 해주는 controller를 작성했습니다.
TokenService
elive7/practice/src/main/java/opt/sopt/practice/auth/rds/service/TokenService.java
Lines 14 to 32 in 4b2d7f4
인자로 전달된 refreshToken을 repository에서 찾아서 해당 refreshToken이 존재한다면, refreshToken의 memberId 정보를 가지고 새롭게 accessToken을 발급해주는 로직을 작성해주었습니다. refreshToken이 존재하지 않는다면 그에 맞게 REFRESH_TOKEN_NOT_FOUND라는 오류를 발생시켜 주었습니다.
SecurityConfig
elive7/practice/src/main/java/opt/sopt/practice/auth/SecurityConfig.java
Line 26 in 4b2d7f4
또한, SecurityConfig에서 accessToken을 재발급하는 url를 whitelist로 지정해두었습니다.
요구사항 분석 📙
구현 고민 사항 📗
elive7/practice/src/main/java/opt/sopt/practice/common/jwt/JwtTokenProvider.java
Lines 44 to 73 in 4b2d7f4
질문있어요! 📘
API 명세서 📔
https://regular-cow-aa9.notion.site/6-API-48e45cca667549fe8ed63af375853723?pvs=4
실제 동작과정은 api 명세서 안에 담았습니다!