현재 내 OAuth2.0 로그인 로직은, 백엔드에서 모든 로직을 처리 후, 프론트로 Refresh Token 전달 후, 재발급을 통해 Access Token을 발급하는 방식을 사용하고 있음.
문제:
OAuth2.0 로그인 후, 백엔드에서 Refresh Token 발급은 제대로 됐지만, 재발급 시 Redis에서 Refresh Token이 존재하지 않아 재발급이 실패.
원인:
재발급 요청에 REFRESH_TOKEN이 2개가 들어감
cookie:
REFRESH_TOKEN=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0b2tlbl90eXBlIjoiUkVGUkVTSCIsImlkIjoxLCJpc3MiOiJib2lsZXJwbGF0ZSIsImlhdCI6MTc0NDg4NDUxNSwiZXhwIjoxNzQ2MDk0MTE1fQ.j2Zbp5Yg8aUq6bNATIOOIMVWdjJIZKJx0_lzhi2qOYc; JSESSIONID=F226D5253EDC2B8B3BB122FE5FEBF58F;
REFRESH_TOKEN=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0b2tlbl90eXBlIjoiUkVGUkVTSCIsImlkIjozLCJpc3MiOiJib2lsZXJwbGF0ZSIsImlhdCI6MTc0NDg5MTkwNiwiZXhwIjoxNzQ2MTAxNTA2fQ.2z98NkT7mSMBbiR43Tz0nQ2oNll_amrgXxpZKdhQQDM
그래서, 처음에 오는 (과거 리프레쉬 토큰)만 계속 비교한 것
어떻게 같은 이름의 쿠키 2개가 전달됐을까?
원인:
https://api.boilerplate.p-e.kr/ 직접 접속해서 보니까 쿠키에
문제의 그 쿠키가 있음 REFRESH_TOKEN=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0b2tlbl90eXBlIjoiUkVGUkVTSCIsImlkIjoxLCJpc3MiOiJib2lsZXJwbGF0ZSIsImlhdCI6MTc0NDg4NDUxNSwiZXhwIjoxNzQ2MDk0MTE1fQ.j2Zbp5Yg8aUq6bNATIOOIMVWdjJIZKJx0_lzhi2qOYc; JSESSIONID=F226D5253EDC2B8B3BB122FE5FEBF58F
그래서, 재발급 요청을 보냈을 때,
https://api.boilerplate.p-e.kr/
와
https://boilerplate.p-e.kr/
에서 각각 하나씩 REFRESH TOKEN을 보낸 것.
✅ 1. 왜 api.boilerplate.p-e.kr에 쿠키가 저장됐는가?
cookie.setDomain("boilerplate.p-e.kr");
이 설정은 다음과 같이 동작:
cookie.setDomain()
값 | 쿠키 전송 대상 |
boilerplate.p-e.kr | boilerplate.p-e.kr, api.boilerplate.p-e.kr, http://www.boilerplate.p-e.kr 등 하위 도메인 모두 |
api.boilerplate.p-e.kr | 오직 api.boilerplate.p-e.kr |
즉, 현재 코드에서 쿠키를 boilerplate.p-e.kr 기준으로 설정하면서도 API 요청이 api.boilerplate.p-e.kr에서 발생하니, API 도메인에도 쿠키가 저장된 것.
쿠키 삭제 로직에도
cookie.setDomain("boilerplate.p-e.kr")를 추가하니 정상적으로 작동.
'Project > Boilerplate' 카테고리의 다른 글
MySQL 비교 시 대소문자 구분 (1) | 2025.04.21 |
---|---|
AWS EC2에서 OAuth2.0 로그인 및 쿠키 저장 문제 (2) | 2025.04.21 |
AWS EC2 Next.js 배포 (1) | 2025.04.15 |
AWS EC2+RDS SpringBoot+MySQL 배포 (2) | 2025.04.15 |
이미지 저장용 EC2 + S3 버킷 연동 (1) | 2025.04.14 |