NodeJs

Node Js로 자바에서 생성한 JWT 검증처리하기

태태개발자 2023. 5. 22. 14:47
반응형

자바 JWT 토큰 생성 및 검증

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;

import java.util.Date;

public class JwtGenerationExample {
    private static final String SECRET_KEY = "yourSecretKey"; // 사용할 시크릿 키

    public static void main(String[] args) {
        // JWT 생성
        String token = createJWT("user123", "John Doe", 3600000); // 1시간 동안 유효한 토큰 생성
        System.out.println("Generated JWT: " + token);
        
        Claims claims = verifyJWT(token);
        if (claims != null) {
            System.out.println("Verified JWT");
            System.out.println("Username: " + claims.getSubject());
            System.out.println("Name: " + claims.get("name"));
            System.out.println("Expiration Date: " + claims.getExpiration());
        } else {
            System.out.println("Invalid JWT");
        }
    }

    // JWT 생성
    public static String createJWT(String userId, String name, long ttlMillis) {
        // 현재 시간을 기준으로 유효 기간 설정
        long nowMillis = System.currentTimeMillis();
        Date now = new Date(nowMillis);

        // JWT 페이로드 생성
		return Jwts.builder()
            .setSubject(userId)
            .claim("name", name)
            .setIssuedAt(now)
            .setExpiration(new Date(nowMillis + ttlMillis))
            .signWith(
                    SignatureAlgorithm.HS256, 
                    Base64.getEncoder().encodeToString(
                    	SECRET_KEY.getBytes(StandardCharsets.UTF_8)
                    )
            )
            .compact();
	}
    
    // JWT 검증
    public static Claims verifyJWT(String token) {
        try {
            return Jwts.parser()
                    .setSigningKey(
                    	Base64.getEncoder().encodeToString(
                        	SECRET_KEY.getBytes(StandardCharsets.UTF_8)
                        )
                     )
                    .parseClaimsJws(token)
                    .getBody();
        } catch (Exception e) {
            // 검증 실패하면 예외 발생
            return null;
        }
    }
}

 

노드 토큰 생성 및 검증

const jwt = require('jsonwebtoken');
const SECRET_KEY = "yourSecretKey"; // 사용한 시크릿 키

// JWT 검증
function verifyJWT(token) {
    try {
        const decoded = jwt.verify(token, SECRET_KEY);
        return decoded;
    } catch (err) {
        // 검증 실패하면 예외 발생
        return null;
    }
}

// JWT 생성
function createJWT(userId, name, expiresIn) {
    const payload = {
        sub: userId,
        name: name
    };

    const token = jwt.sign(payload, SECRET_KEY, { expiresIn });
    return token;
}


const token = createJWT('user123', 'John Doe', '1h'); // 1시간 동안 유효한 토큰 생성
console.log('Generated JWT: ', token);
const decodedToken = verifyJWT(token);
if (decodedToken) {
    console.log('Verified JWT');
    console.log('Username:', decodedToken.sub);
    console.log('Name:', decodedToken.name);
    console.log('Expiration Date:', new Date(decodedToken.exp * 1000)); // Unix timestamp를 밀리초 단위로 변환
} else {
    console.log('Invalid JWT');
}

 

반응형