JWT의 실행구조를 이해해야, 이를 활용한 인증 시스템을 설계하고 리팩토링 할 수 있는 능력이 생길 것이다.
따라서
1. JWT의 개념
2. 작동 방식
3. 실제로 사용하는 흐름
에 대해서 정리해보쟈!!!
JWT는 세 가지 부분으로 구성된 JSON 객체이다.
각각의 부분은 . 으로 구분되고, 기본적인 구조는 다음과 같다.
JWT는 인증과정에서 주로 다음과 같은 흐름으로 사용된다.
public String createToken(Long userId, String email, String nickname, UserRole userRole) {
Date now = new Date();
return Jwts.builder()
.setSubject(String.valueOf(userId)) // 사용자 ID를 subject로 설정
.claim("email", email) // 추가적인 클레임 (email)
.claim("nickname", nickname) // 추가적인 클레임 (nickname)
.claim("userRole", userRole) // 추가적인 클레임 (userRole)
.setIssuedAt(now) // 토큰 발행 시간
.setExpiration(new Date(now.getTime() + TOKEN_TIME)) // 만료 시간
.signWith(key, SignatureAlgorithm.HS256) // 비밀 키로 서명
.compact(); // 토큰을 직렬화하여 문자열로 반환
}
public Claims extractClaims(String token) {
return Jwts.parserBuilder()
.setSigningKey(key) // JWT 생성 시 사용한 비밀 키
.build()
.parseClaimsJws(token) // 토큰 파싱 및 검증
.getBody(); // 검증된 클레임 추출
}