전체 구현은 아래 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 서버를 사용할 때
- 로그인 후 JWT를 발급(issue) 받습니다.
- 발급받은 JWT를 Authorization 헤더에 담아 서버에 요청을 보냅니다.
- 서버는 해당 JWT를 검증(validateToken)합니다.
2. 유저가 직접 JWT의 Payload를 사용해야 할 때
- JWT Issuer 서버로부터 공개키(publicKey)를 미리 요청받습니다.
- 발급받은 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 레포지토리를 참고해주세요.
궁금한 점이나 개선사항이 있다면 댓글로 남겨주세요. 🙌
'SpringBoot' 카테고리의 다른 글
| Spring boot 에서 RSA JWT 적용해보기 (1) | 개요 및 검증 (0) | 2025.06.21 |
|---|---|
| Springboot 속도 제한 및 조절 구현, 유량 제어 | Resilience4j (0) | 2025.03.17 |
| Springboot ECS logging structure (0) | 2025.02.26 |
| Spring Boot XSS 크로스사이트 스크립트 적용하기 with jsoup (0) | 2024.12.01 |
| GraalVM 으로 SpringBoot 시작 시간 줄이기 (맛보기) (0) | 2024.03.27 |