이슈 요약
문제 현상: 배포 환경(docker-local)에서 카카오 로그인 시
KOE303오류 발생정상 동작: 로컬(local) 환경에서는 정상 로그인됨
오류 메시지:
{ "error": "invalid_grant", "error_description": "Redirect URI mismatch.", "error_code": "KOE303" }
발생 일시
- 2025.06.10 오후
상세 증상
로컬(local)에서는
.env.local에 설정된kakao_redirect_uri=https://leafresh.app/member/kakao/callback값과 Kakao Developers 콘솔 등록 값이 일치하여 로그인 성공.docker-local(dev) 환경에서는
.env.docker-local에 다음 값이 존재:kakao_redirect_uri=https://localhost:3000/member/kakao/callback이 값이
@Value("${kakao.redirect-uri}")를 통해KakaoTokenClient에 주입됨→ 최종적으로 Kakao API로 잘못된 redirectUri 전송됨
→
KOE303오류 발생
원인 분석
OAuthController→OAuthLoginService→OAuthKakaoService→KakaoTokenClient이 흐름에서 정상적인 redirectUri가 전달되었지만,
KakaoTokenClient내부에서 환경 변수로 주입된redirectUri가 의도치 않게 오버라이드
수정 사항
1. KakaoTokenClient.java
@Value로 주입된redirectUri필드 삭제:
- @Value("${kakao.redirect-uri}")
- private String redirectUri;
- 로그 메시지에서도 redirectUri 제거:
- log.info("카카오 TokenClient 설정 로드 완료 - clientId={}, redirectUri={}, clientSecret={}",
- clientId, redirectUri, clientSecret);
+ log.info("카카오 TokenClient 설정 로드 완료 - clientId={}, clientSecret set={}",
+ clientId, clientSecret != null && !clientSecret.isBlank());
getAccessToken()에서는 전달된 파라미터만 사용 (변경 없음):
public String getAccessToken(String authorizationCode, String redirectUri) {
var formData = BodyInserters
.fromFormData("grant_type", "authorization_code")
.with("client_id", clientId)
.with("redirect_uri", redirectUri) // 파라미터 사용
.with("code", authorizationCode);
...
}
2. OAuthController.java
- callback 경로를
/member/{provider}/callback→/{provider}/callback으로 통일 (프론트와 URI 충돌 방지):
- @GetMapping("/member/{provider}/callback")
+ @GetMapping("/{provider}/callback")
3. .env.docker-local
- kakao_redirect_uri 값은 더 이상 사용되지 않으므로 주석 처리 또는 제거
- kakao_redirect_uri=https://localhost:3000/member/kakao/callback
+ # kakao_redirect_uri=https://localhost:3000/member/kakao/callback
테스트 결과
| 환경 | 결과 |
|---|---|
local (.env.local) |
정상 로그인 |
dev (.env.docker-local) |
오류 사라짐, 로그인 성공 |
| 로그 확인 | access token 요청 시 전달되는 redirectUri가 https://leafresh.app/member/kakao/callback으로 일치 |
재발 방지 방안
- redirectUri는 고정 주입하지 않고, 프론트
origin+ 경로를 동적으로 조합하도록 유지 - KakaoTokenClient는 반드시 파라미터 기반 redirectUri 사용
.env에서 사용하지 않는 값은 제거하거나 명시적으로 주석 처리
'Leafresh: 환경 챌린지 플랫폼' 카테고리의 다른 글
| 피드백 생성 요청의 비동기 아키텍처 전환 배경 및 구조 설계 (2) | 2025.07.08 |
|---|---|
| 타임딜 목록 조회 시 상태값이 로컬과 서버에서 다르게 표시되는 문제 (UTC → KST) 트러블슈팅 로그 (0) | 2025.06.12 |
| Chatbot SSE 기능 구현 트러블슈팅 로그 (2) | 2025.06.10 |
| Redis Lua·Pub/Sub 기반 주문 처리 시스템 구축기 (2) | 2025.06.07 |
| Redis 기반 통계 동기화 시스템에서의 캐시 누락 및 지수적 증가 문제 (0) | 2025.06.07 |