웹 개발/Spring

JWT관련 라이브러리 비교

Blue_bull 2025. 5. 17. 22:29

항목 jjwt nimbus-jose-jwt

개발 주체 JJWT (Stormpath, Okta 등) Connect2id (OAuth 전문가 그룹)
목적 간단한 JWT 생성/검증 RFC 표준 완전 준수 & 복잡한 보안 처리
사용 난이도 쉬움 (간결한 API) 어려움 (구조 분리, 세부 제어 많음)
지원 알고리즘 HS256, RS256 등 주요 알고리즘 지원 거의 모든 JOSE 알고리즘(JWS, JWE 등) 완전 지원
사용 사례 일반적인 JWT 인증/인가 OpenID Connect, JWE 암호화 토큰 등 고급 보안 요구
코드 간결성 매우 짧고 직관적 설계는 명확하지만 다소 장황

 

 


✅ 1. nimbus-jose-jwt란?

Java에서 JWT, JWS, JWE, JWK, JOSE 헤더 등의 RFC 표준을 완벽히 구현한 보안 라이브러리입니다.

  • JOSE: JSON Object Signing and Encryption (JWT의 상위 개념)
  • 단순한 JWT 발급뿐만 아니라,
    • RSA, EC, HMAC 서명
    • JWE (암호화된 JWT)
    • JWK (공개키 공유 포맷)
    • ClaimsSet, Signature 검증 제어
      까다로운 보안 요구도 지원합니다.

✅ 2. 기본 사용 흐름

🔐 1. JWT 생성 (서명 포함)

// 1. 서명자 생성 (HMAC 방식 예시)
JWSSigner signer = new MACSigner(secret);

// 2. ClaimSet 구성
JWTClaimsSet claimsSet = new JWTClaimsSet.Builder()
    .subject("bluebull")
    .issuer("your-app")
    .expirationTime(new Date(new Date().getTime() + 60 * 1000))
    .build();

// 3. SignedJWT 생성
SignedJWT signedJWT = new SignedJWT(
    new JWSHeader(JWSAlgorithm.HS256),
    claimsSet
);

// 4. 서명
signedJWT.sign(signer);

// 5. 문자열로 직렬화
String token = signedJWT.serialize();

🔎 2. JWT 검증

// 1. 문자열 토큰 파싱
SignedJWT signedJWT = SignedJWT.parse(token);

// 2. 검증자 생성
JWSVerifier verifier = new MACVerifier(secret);

// 3. 서명 유효성 검증
if (signedJWT.verify(verifier)) {
    JWTClaimsSet claims = signedJWT.getJWTClaimsSet();
    String subject = claims.getSubject();
}

✅ 3. nimbus-jose-jwt의 강력한 기능들

기능 설명

JWS (JWT + 서명) RS256, HS256, ES256 등 모든 RFC 알고리즘 지원
JWE (JWT + 암호화) 암호화된 토큰 생성/해석 가능
JWK (키 공개/공유) RSA/EC 키 공개를 위한 표준 포맷
정밀한 Claim 조작 Issue time, Expiration, Audience 등 다중 claim 처리
서명/검증 커스텀 처리 키 회전, 복수 키, 조건별 검증 등 제어 가능

✅ 4. 언제 쓰는 게 좋은가?

요구사항 추천도

단순 JWT 발급/검증 (로그인 인증용) ❌ 복잡도 높아 불필요
OAuth2, OpenID Connect 구현 ✅ 매우 적합
RSA 공개키로 서명된 JWT 검증 ✅ (Public/Private 키 완벽 지원)
암호화된 JWE 토큰 처리 ✅ 유일하게 표준대로 처리 가능
다중 알고리즘 지원 필요 (BYOK 등) ✅ 고급 보안 설계 가능

✅ jjwt vs nimbus-jose-jwt 정리

항목 jjwt nimbus-jose-jwt

사용 난이도 매우 쉬움 상대적으로 복잡
표준 준수 일부 RFC 7515~7519 완전 준수
암호화 지원 ❌ 없음 ✅ JWE 완전 지원
키 관리 단순 시크릿 키만 RSA, EC, JWK 등 지원
기업 보안 설계 제한적 전문 수준 설계 가능

✅ 실무 팁

  • nimbus는 Spring Security + OAuth2 서버 구현할 때 종종 OpenID Connect 토큰 검증용으로 사용됩니다.
  • HMAC만 쓰고, 단순하게 쓰고 싶다면 굳이 nimbus를 쓰지 않아도 됩니다.
  • 그러나 RSA 서명 검증, JWK 공개키 공유가 있다면 nimbus는 거의 유일한 선택지입니다.