Project/Boilerplate

OAuth2.0 로그인 시 Access Token 재발급 문제

조용우 2025. 4. 21. 19:13

현재 내 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")를 추가하니 정상적으로 작동.