-
Notifications
You must be signed in to change notification settings - Fork 5
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
[FEATURE] : JWT 토큰 생성 및 검증 #61
base: develop
Are you sure you want to change the base?
Conversation
- common에 JwtProvider 추가: Jwt 토큰의 로직을 담당하기 위함 - common에 JwtProvider 추가: yml 파일에 있는 jwt 구성요소에 접근하기 위함
createAccessToken 메소드를 통해 발급된 토큰이 null이 아닌지 확인합니다.
- 파라미터를 이용하여 단순한 토큰 인코딩을 제공하는 메소드를 JwtUtil에 분리
- 토큰의 유효성을 검사하는 verifyToken 메소드 구현
>> >> - verifyToken_valid 메소드로 토큰의 유효성을 검사 >> - verifyToken_expired 메소드로 만료된 토큰에 대해 예외를 발생시키는지 검사
- getClaims : 토큰에서 추출한 정보를 반환하는 메소드
- getClaims 메소드가 디코딩한 내용과, 디코딩 전 내용이 동일한지 테스트
- 반복되는 코드 메소드화 - 값들을 상수화
- createRefreshToken 메소드: claim을 가지고 있지 않은 리프레시 토큰 생성
- 리프레시 토큰이 발급 되는지 확인
- 상수명 대문자 및 카멜스타일로 변경 - stubExpiration -> stubAccessTokenExpiration 메소드명을 명확하게 변경
- 불필요한 주석 제거
- generateToken : refreshToken과 accessToken을 같이 반환 - DTO 추가
- 발급된 refreshToken이 null이 아님을 확인 - 발급된 accessToken이 null이 아님을 확인
- User 도메인에 userRole enum 클래스 추가 - createAccessToken : userRole 파라미터 추가 - generateToken : userRole 파라미터 추가 - test 코드에 userRole 반영으로 인한 변경사항 추가
* */ | ||
public String createAccessToken(Long userId, String userRole) { | ||
|
||
Date now = new Date(System.currentTimeMillis()); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Date TZ 고정화 부분 수정 필요할거 같아요~ 아까 말한느낌으로 해당 PR 브랜치에 push 해주세요
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
안녕하세요 태현님! 해당 사항 수정해서 PR 브랜치에 push 했습니다 :)
하지만, 수정하면서 아래의 이슈가 있었습니다! 같이 이야기 나누어보면 좋을 것 같습니다.
-
jjwt라이브러리는 Date만을 지원합니다.
다른 타입 지원은 아직 개발 중이라고 합니다. -
따라서 TimeUtil 클래스를 만들어서 시간대를 localDateTime -> Date로 변환하는 방법으로 수정하였습니다.
-
하지만 Date로 변환 과정에서 region이나 운영체제에 영향을 받을 수 있습니다.
- 그러나, 발급해주는 시간 자체를 한국으로 고정해서 발급했기 때문에 언제든 다시 한국 시간을 유추할 수 있어서 해당 방법을 사용했습니다.
- 또한, jjwt 라이브러리에서 토큰을 검증할 때도 UTC 시간을 기준으로 비교 하기 때문에, 발급해주는 애플리케이션의 시간대만 고정되어있으면 괜찮을 것 같아서 먼저, 해당 방법을 선택해서 작업 했습니다.
👏👏👏 |
jjwt 라이브러리가 Date 타입만 지원을 한다고 합니다. 그 스펙에 맞춰서 수정하였습니다. - ClockConfig(Class) : ClockConfig를 통해 애플리케이션의 타임존을 Asia/Seoul로 고정합니다 - TimeUtil(Class) : localDateTime -> Date로 변환하는 메서드를 포함합니다. 반대의 경우도 추가 예정입니다. - JwtProvider(Class) : 1. clock을 주입받습니다. 2. 토큰이 생성될 경우 clock을 이용하여 시간을 가져오고 그 시간을 다시 Date로 변환하여 jwt의 claim에 설정합니다.
🆕 기능 추가 / 🔧 버그 수정
📋 변경 사항
🔍 테스트 사항
📝 추가 사항