항목 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는 거의 유일한 선택지입니다.
'웹 개발 > Spring' 카테고리의 다른 글
기본적인 jjwt 기반 인증 시스템 구성 (0) | 2025.05.17 |
---|---|
Spring Security - JWT 인증 흐름과 @AuthenticationPrincipal, 토큰 응답 처리 정리 (0) | 2025.04.26 |
Spring Security 인가 DSL 메서드 정리 (0) | 2025.04.25 |
Spring security 패턴 매칭 기호(프론트, 백 HTTP통신시 중요) (0) | 2025.04.23 |