728x90
반응형
2025.11.03 - [개발 노트/Experience] - 사이드 프로젝트 품앗이를 정리하며
JWK로 OAuth2 토큰 검증하기
품앗이의 로그인은 사용자 편의를 위한 카카오 로그인이다. 즉, OAuth2 방식인 셈이다. 카카오 로그인 구현과 관련된 내용은 내 블로그에서 이미 다룬 바 있어, 여기서는 생략한다.
늘 구현하던 카카오 로그인이지만, 이번에는 실제 사용자를 대상으로 했기 때문에 한 가지를 더 고민해야 했다. 바로 “프론트에서 전달되는 카카오 토큰을 믿을 수 있는가?”이다. 사실 API를 호출하는 주체는 프론트 측이기 때문에, 편의상 이를 프론트라고 부르겠다.
품앗이 프로젝트에서는 프론트에서 카카오 로그인 토큰을 받아 백엔드에 전달하면, 백엔드 API에서 사용할 수 있는 토큰으로 교환해주는 방식이다. 따라서 프론트가 전달하는 카카오 토큰을 무작정 신뢰할 수 있는지 여부가 중요한 문제였다.
이 문제를 해결하는 방법 중 하나가 JWK다.
> JWK
카카오가 제공하는 공개 키 정보를 담은 JSON 형식의 데이터로, ID 토큰이 진짜인지 안전하게 확인할 때 사용된다.
자연스럽게 코드를 작성하고 이를 정리하다 보니, 개발 과정이 다음과 같은 시퀀스로 진행되었음을 확인할 수 있었다.

위 시퀀스는 다음 흐름을 보여준다:
- 사용자가 카카오 로그인을 통해 ID 토큰을 발급받는다.
- 프론트에서 전달된 토큰을 백엔드 KakaoIdTokenVerifier가 검증한다.
- 캐시된 JWK가 없거나 만료된 경우, 카카오 서버에서 새 JWK를 받아 캐싱한다.
- 토큰 헤더에서 kid를 확인하고, JWK에서 해당 공개 키를 선택한다.
- 공개 키로 토큰을 디코딩하고 유효성을 검증한다.
- 토큰이 유효하면 사용자 정보를 반환하고, 유효하지 않으면 예외를 발생시킨다.
728x90
반응형
'개발 노트 > 개발 삽질' 카테고리의 다른 글
| [품앗이] FastAPI 아키텍처 어떻게 가져갈 것인가? (0) | 2025.11.04 |
|---|---|
| Python으로 푸쉬 알람 전송과 시행착오 (1) | 2025.05.18 |
| Commit Message 자동화하기, 근데 AI를 곁들인 (0) | 2025.04.24 |
| makefile에서 .env 사용 시 특수문자 처리하기 (0) | 2025.02.12 |
| 토스 채용공고는 어떻게 크롤링 할 수 있을까? (0) | 2025.02.12 |