SpringBoot

Spring boot 에서 RSA JWT 적용해보기 (2) | 구현

pepega 2025. 6. 23. 04:08

 

전체 구현은 아래 GitHub 저장소에서 확인하실 수 있습니다.
🔗 GHGHGHKO/roadmap-todo

 
이 글에서는 JWT를 발급하고 검증하는 서버에서 토큰을 핸들링하는 핵심 로직만 발췌하여 설명합니다.
Kotlin과 Spring Boot 3.4.0-SNAPSHOT, Corretto 21을 사용했습니다.
https://github.com/GHGHGHKO/roadmap-todo

GitHub - GHGHGHKO/roadmap-todo: todos with authenticate

todos with authenticate. Contribute to GHGHGHKO/roadmap-todo development by creating an account on GitHub.

github.com

 
 

기능 개요

이 서버는 RS256 알고리즘을 이용해 JWT를 생성하고 검증합니다. 주요 기능은 다음과 같습니다:

  • 개인키 및 공개키 생성 (privateKey, publicKey)
  • RS256 기반 JWT 발급 (issue)
  • JWT 검증 (validateToken)

동작 흐름

1. 유저가 JWT Issuer 서버를 사용할 때

  1. 로그인 후 JWT를 발급(issue) 받습니다.
  2. 발급받은 JWT를 Authorization 헤더에 담아 서버에 요청을 보냅니다.
  3. 서버는 해당 JWT를 검증(validateToken)합니다.

2. 유저가 직접 JWT의 Payload를 사용해야 할 때

  1. JWT Issuer 서버로부터 공개키(publicKey)를 미리 요청받습니다.
  2. 발급받은 JWT에 대해 해당 공개키로 서명 검증을 수행합니다.

 

구현

개인키, 공개키 발급 (privateKey, publicKey)

 

 

⚠️ 주의: 이 코드는 학습 및 테스트 용도로 제공됩니다.
실 운영 환경에서는 AWS KMS, HashiCorp Vault 등 키 관리 솔루션을 사용하는 것이 안전합니다.

  • 서버 시작 시 @PostConstruct로 RSA 키 쌍을 초기화합니다.
  • privateKey: JWT 생성 및 서명에 사용
  • publicKey: 클라이언트에게 제공되어 JWT 서명 검증에 사용

 

RS256 JWT 발급, JWT 검증

 

 

RS256 JWT 발급

JWT는 RS256 알고리즘으로 서명되며, 다음과 같은 구조를 가집니다:

eyJhbGciOiJSUzI1NiJ9.eyJzdWIiOiIwOGQ0YzZkNi0xNTU5LTRjYTEtYWQwMi0zOGYzODk1Yzg0YjciLCJpc3MiOiJyb2FkbWFwLXRvZG8iLCJpYXQiOjE3NTA2MTc1NjMsImV4cCI6MTc1MDcwMzk2M30.ZiotshMKfnvj7MFfhS2vKzj9EALnO2jL9uLUG2EUdipjsE42J67-xQ09gLprMeDEhwLFdBxvxHS7kLQ4g1Pp9JSeGpcjnZ6LvTgSRWL2J7xYvyW6bWpsyVW8JurEmYkwgHwmqWDvimBI9hce7qsoTYXV7j4RdOHG3qJpcPrIwpSo-ktEaMV7lreWJ_fG8MIN-9bBtlfSxaCA0xSyTWnVA5Z6LjlmNR-NW6cBHsMTC-VJwa8RwH6cQRLMlrMHUHZpQTN4oSXAifIz86XNssbJCEOwWvZ2_tQ6bs0Jf8LJxLKBInR806Tc3Ep6I1Jk7g2CDFiQKXP360yrB9myELM3-A

 

JWT 검증

validateToken
 

  • 클라이언트가 보낸 JWT를 publicKey로 검증합니다.
  • 유효하지 않거나 만료된 경우 예외가 발생합니다.

 
 

마무리

이제 JWT 발급, 검증, 공개키 제공까지 기능 구현이 완료되었습니다.
자세한 구현은 GitHub 레포지토리를 참고해주세요.
궁금한 점이나 개선사항이 있다면 댓글로 남겨주세요. 🙌