[JWT] jwt 와 jjwt 차이 및 jjwt의 주요 라이브러리

Oksun Noh·2025년 1월 31일
0

JWT

목록 보기
1/1

jjwt vs jwt 차이점

둘 다 JWT(JSON Web Token)을 다루는 라이브러리이지만, jjwt는 Java에서 JWT를 쉽게 다룰 수 있도록 만든 라이브러리.

1. jwt란?

  • jwt(JSON Web Token)는 데이터의 무결성을 검증할 수 있는 토큰 기반 인증 방식.

  • 즉, JWT는 개념이라고 생각하면 되고, 특정 언어에 종속되지 않은 토큰 형식.

1-1. 어떤 이유로 사용하는가?

  • JSON을 기반으로 사용자의 인증 정보를 안전하게 주고받을 수 있음.

  • Header, Payload, Signature로 구성됨.

  • 보통 HMAC, RSA, ECDSA 등의 알고리즘을 사용하여 서명(Signature)을 포함함.

  • 다양한 프로그래밍 언어에서 JWT를 지원하는 라이브러리가 존재함.

    • jjwt
    • jsonwebtoken
    • pyjwt 등

1-2. JWT 규칙

  • JWT는 기본적으로 long을 담을 수 없음.

2. jjwt란?

  • jjwt(Java JWT)는 Java에서 JWT를 쉽게 생성하고, 검증할 수 있도록 도와주는 라이브러리입.
  • 즉, JWT를 구현한 Java 라이브러리 중 하나fh, Java 개발자가 JWT를 다룰 때 가장 많이 사용하는 라이브러리입니다.

2-1. jjwt의 주요 기능

기능메서드
JWT 생성Jwts.builder()
JWT 서명(Signature) 적용signWith()
JWT 파싱(디코딩)Jwts.parserBuilder()
JWT 검증(유효성 체크)parseClaimsJws()

2-2. 예제

SecretKey secretKey = Keys.hmacShaKeyFor(secret.getBytes());
		
        // payload는 토큰의 클레임 = payload 임
		Map<String, Object> payload = Map.of(
				"name", "Paul",
				"age", 23);

		// 토큰을 언제 만들었는지
		Date issuedAt = new Date();
        // 유효기간 날짜에서 시간을 빼고 expireSeconds 에 x 1000해서 ms로 만들어서 더한 값이라고 보면 됨
		Date expiration = new Date(issuedAt.getTime() + 1000L * expireSeconds);

		String jwtStr = Jwts.builder() // JWT 빌더 객체를 생성
				.claims(payload) // 사용자 정보를 설정
				.issuedAt(issuedAt) // 발급 시간을 설정
				.expiration(expiration) // 만료 시간을 설정
				.signWith(secretKey) // 사용자 서명을 적용
				.compact(); // 최종적으로 JWT를 Base64Url 문자열로 반환하겠다

		assertThat(jwtStr).isNotBlank();

		// 키가 유효한지 테스트
		Map<String, Object> parsedPayload = (Map<String, Object>) Jwts
				.parser() // JWT를 해석하는 객체를 생성
				.verifyWith(secretKey) // .parser의 체인 메서드로, JWT를 sercretKey를 활용해 일치하는지 검증)
				.build() // 그 기능을 할 parser 객체를 완성 (만든다)
				.parse(jwtStr) // 사용자가 입력한 JWT를 해석하여 payload를 추출
				.getPayload(); // JWT를 반환

		// 키로 부터 payload 를 파싱한 결과가 원래 payload 와 같은지 테스트
assertThat(parsedPayload).containsAllEntriesOf(payload);

2-3. payload 와 claims

  • Payload는 JWT에 실질적으로 저장되어 있는 사용자의 정보.
    Claims는 Payload를 감싸고 잇는 객체 (Key-value)의 형태

2-4. parser vs parse

  • parser()은 JWT를 분석하기 위한 단순 준비에 단계에 속함. 즉, 아직 JWT를 분석하기 이전이라는 의미.

  • parse()는 이전 단계에서 parser().verifyWith(secretKey)를 통해 JWT 서명(signature)이 유효한지를 검증하고, 검증이 완료되면 실제로 JWT를 해석.

profile
저는 만두를 좋아합니다

0개의 댓글