카카오 로그인 API 중 KOE320에러 발생

문의 시, 사용하시는 개발환경과 디벨로퍼스 앱ID를 알려주세요.
앱 ID : 939320
개발환경 : 프론트엔드 - Vue.js / 백엔드 : SpringBoot


사용하는 사이트 주소를 dev.adress.com이라고 하겠습니다.

현재 nginx를 이용하여 dev.adress.com/ 로 오는 요청은 3000번으로, dev.adress.com/api/로 오는 요청은 5000번 포트로 포트포워딩하고 있습니다.
3000번 포트에는 프론트엔드 서버가, 5000번 포트에는 백엔드 서버가 실행되고 있습니다.

카카오 로그인의 redirect_uri는 dev.adress.com/oauth/kakao/callback (프론트엔드 주소) 이고, 해당 주소로 접속하면 프론트엔드에서 dev.adress.com/api/oauth/kakao/callback (백엔드 주소)로 인가코드를 보내는 방식으로 로그인을 구현하였습니다. 그러나 아래와 같은 에러가 발생하며 로그인이 진행되지 않고 있습니다.

{
    "errorCode": "500 INTERNAL_SERVER_ERROR",
    "errorMessage": "[400 Bad Request] during [POST] to [https://kauth.kakao.com/oauth/token?code=kZM_e-rqQDqyPgTp6QgwbscDUUpWCFUeC9PwbCwgQcPWHtBTyT77fbCgEQ8krZ-ef3PAXgorDR4AAAGJqkxA-Q%2CkZM_e-rqQDqyPgTp6QgwbscDUUpWCFUeC9PwbCwgQcPWHtBTyT77fbCgEQ8krZ-ef3PAXgorDR4AAAGJqkxA-Q&grant_type=authorization_code&client_secret=kWnXJsdGeizUyjEDdUgX9s25sWa4SSup&redirect_uri=https%3A%2F%2Fdev.pop-ping.com%2Foauth%2Fkakao%2Fcallback&client_id=cecace976e616b34de2152ac78d7542b] [KakaoTokenClient#requestKakaoToken(String,Request)]: [{"error":"invalid_grant","error_description":"authorization code not found for code=kZM_e-rqQDqyPgTp6QgwbscDUUpWCFUeC9PwbCwgQcPWHtBTyT77fbCgEQ8krZ-ef3PAXgorDR4AAAGJqkxA-Q,kZM_e-rqQDqyPgTp6QgwbscDUUpWCFUeC9PwbCwgQcPWHtBTyT77fbCgEQ8krZ-ef3PAXgorDR4AAAGJqkxA-Q","error_code":"KOE320"}]"
}

찾아보니 동일한 인가코드를 사용하여 중복해 요청할 경우 발생하는 에러라는 것을 확인하였습니다. 백엔드 서버의 로그를 보니 백엔드에선 한 번만 요청을 하고 있습니다.

localhost에서는 문제 없이 실행되었는데, 사이트를 실제 배포하여 사용하니 오류가 발생했습니다.
dev.adress.com:3000과 같이 포트를 직접 작성하여 사용할 때도 문제 없이 진행되었습니다.

해당 에러가 nginx 설정문제로 발생하는지 궁금하고, 현재 요청이 어떻게 되는지 궁금하여 글을 작성합니다. 읽어주셔서 감사합니다. 혹시 http 요청을 https로 변환하면서 발생하는 에러인지도 궁금합니다.

로그를 보니 액세스 토큰 발급 요청 시, 인가코드를 컴마로 구분하여 2개씩 전달하고 있습니다.

확인 부탁드려요.

응답으로 전달한 에러 Body
{"error":"invalid_grant","error_description":"authorization code not found for code=N3UCgYq0RvTrGUdQRZTQRikR_bVQA6J2xRpMvSzbOIVlHGb212uvMmkFGvU_VSePLIV4_go9c00AAAGJqlvXLA,N3UCgYq0RvTrGUdQRZTQRikR_bVQA6J2xRpMvSzbOIVlHGb212uvMmkFGvU_VSePLIV4_go9c00AAAGJqlvXLA","error_code":"KOE320"}

nginx에서 포트포워딩을 할때 /api/주소를 없애기 위해 rewrite를 하는데, rewrite할 때 rewrite ^/api/(.)$ $1?$args break 명령어를 사용했는데 이런 과정에서 $args 때문에 code가 한 번 더 뒤에 붙어져서 주소가 dev.adress.com:5000/oauth/kakao/callback?code=9m3Y?code=9m3Y 로 되어 중복되어 요청되는 것이었습니다! rewrite ^/api/(.)$ $1로 변경하여 해결했습니다. 답변 감사합니다.

1개의 좋아요