Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

지석이의 일기

JWT를 이용한 Access Token과 Refresh Token 발행 및 유효성 검사 본문

Java

JWT를 이용한 Access Token과 Refresh Token 발행 및 유효성 검사

91년도에 철산에서 태어난 최지석 2024. 1. 18. 00:42

Java에서 JWT를 이용하여 Access Token과 Refresh Token을 발행하고, API 요청 시 토큰의 유효성을 검사하는 방법에 대해 알아보겠습니다.

  1. 의존성 추가

먼저 'jjwt' 라이브러리를 사용하기 위해 다음의 의존성을 Maven 프로젝트에 추가해야 합니다.

 
<dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt</artifactId>
    <version>0.9.1</version>
</dependency>
  • Access Token과 Refresh Token 발행

다음은 JWT를 이용하여 Access Token과 Refresh Token을 발행하는 Java 코드입니다.

import io.jsonwebtoken.*;

import java.util.Date;

public class JwtExample {

    private static final String SECRET_KEY = "SecretKey";
    private static final long ACCESS_TOKEN_EXPIRE_TIME = 1000 * 60 * 30;  // 30분
    private static final long REFRESH_TOKEN_EXPIRE_TIME = 1000 * 60 * 60 * 24 * 7;  // 7일

    public static String generateToken(String subject, long expireTime) {
        long nowMillis = System.currentTimeMillis();
        Date now = new Date(nowMillis);

        String jwtToken = Jwts.builder()
                .setSubject(subject)
                .setIssuedAt(now)
                .setExpiration(new Date(nowMillis + expireTime))
                .signWith(SignatureAlgorithm.HS256, SECRET_KEY)
                .compact();

        return jwtToken;
    }
}

위 코드에서 generateToken 함수는 주제와 만료 시간을 매개변수로 받아 JWT 토큰을 발행합니다.

  1. 토큰 유효성 검사

다음은 주어진 JWT 토큰의 유효성을 검사하는 Java 코드입니다.

public static void validateToken(String jwtToken) {
    try {
        Jwts.parser().setSigningKey(SECRET_KEY).parseClaimsJws(jwtToken);
        System.out.println("JWT Token is valid.");
    } catch (ExpiredJwtException e) {
        System.out.println("JWT Token is expired.");
    } catch (JwtException e) {
        System.out.println("JWT Token is invalid.");
    }
}

validateToken 함수는 주어진 JWT 토큰의 유효성을 검사합니다. 토큰이 만료되었거나, 시그니처가 유효하지 않은 경우에는 적절한 메시지를 출력합니다.

 

토큰의 유효성 체크는 인터셉터에서 진행하면됩니다.

전체적인 흐름은 아래와 같습니다.

감사합니닷