카카오 로그인 액세스 토큰 발급 400 오류

개발환경: java spring + next js
앱 ID: 1042589

안녕하세요, 카카오 로그인 관련 문의 드립니다.
프론트 연동에서 문제가 있어 질문 드립니다.

백엔드 측에서 액세스 토큰 발급까지 잘되는 지를 확인해보기 위해 테스트용 index html을 생성하고 인가 코드 발급, 인가 코드 전달하여 액세스 토큰 발급 API 까지 모두 성공적으로 진행되는 것을 확인했습니다.

하지만 이후 프론트 측에서 페이지 생성 후 리다이렉트 하고 인가 코드 발급 후 백엔드의 액세스 토큰 발급 API로 넘기면 카카오 측으로 액세스 토큰을 요청하는 부분에서 400 오류가 발생합니다. (프론트에서 카카오 인가 코드 발급 후 백으로 인가 코드를 넘기면 액세스 토큰을 발급해서 보내주는 과정으로 구현했습니다.)

모두 같은 리다이렉트 URI, key를 사용하고 있는데 문제가 무엇인지 파악하기 어려워 문의드립니다.

<백엔드 측에서 자체 테스트해보았을 때>

https://kauth.kakao.com/oauth/token?grant_type=authorization_code&client_id=***&redirect_uri=http://***:8080/api/v1/auth/kakao/login&code=***
responseCode : 200
response body : {"id":***,"connected_at":"2024-03-03T05:01:03Z","properties":{"nickname":"***"},"kakao_account":{"profile_nickname_needs_agreement":false,"profile":{"nickname":"***"},"has_email":true,"email_needs_agreement":false,"is_email_valid":true,"is_email_verified":true,"email":"***"}}
result typejava.lang.String
{nickname=***}
https://kauth.kakao.com/oauth/token?grant_type=authorization_code&client_id=***&redirect_uri=http://***:8080/api/v1/auth/kakao/login&code=***

<프론트 측에서 연동했을 때>

2024-03-08T03:20:48.482Z ERROR 1 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: org.springframework.web.reactive.function.client.WebClientResponseException$BadRequest: 400 Bad Request from POST https://kauth.kakao.com/oauth/token?grant_type=authorization_code&client_id=***&redirect_uri=http://***:8080/api/v1/auth/kakao/login&code=*** with root cause

org.springframework.web.reactive.function.client.WebClientResponseException$BadRequest: 400 Bad Request from POST https://kauth.kakao.com/oauth/token?grant_type=authorization_code&client_id=***&redirect_uri=http://***:8080/api/v1/auth/kakao/login&code=***
        at org.springframework.web.reactive.function.client.WebClientResponseException.create(WebClientResponseException.java:307) ~[spring-webflux-6.1.2.jar!/:6.1.2]```

안녕하세요.

접근 토큰 발급 시 KOE303 오류가 발생하고 있습니다.
KOE303오류는 인가코드와 접근토큰 발급시 사용된 redirect_uri 파라미터가 다른 경우 발생합니다.

아래와 같이 서로 다르게 요청되고 있습니다. 참고 부탁드립니다.

인가코드: http://13.125.51.254:8080/api/v1/auth/kakao/login
접근토큰: http://13.125.51.254:8080/api/v1/auth/kakao

인가코드: http://localhost:3000/login/kakao
접근토큰: http://13.125.51.254:8080/api/v1/auth/kakao/login

인가코드: http://localhost:8080/api/v1/auth/kakao/login
접근토큰: http:/localhost:8080/api/v1/auth/kakao/login

http://localhost:3000/login/kakao 로 redirect_uri 를 통일하여 요청했는데 같은 문제가 발생합니다.

한번 더 확인 부탁드리겠습니다.

현재는 KOE320 오류가 발생하고 있습니다.
KOE320 오류는 유효하지 않은 인가코드 사용시 발생되는 오류입니다.
인가코드는 성공 실패 여부와 상관없이 단 한번만 사용가능합니다. 참고 부탁드립니다.

감사합니다.

이중에서 '이미 사용(만료)된 인가코드를 재사용 한 경우’에 해당되는 건가요?

백쪽에서 인가 코드를 재발급하지 않고 해결할 수 있는 방법은 없는지 문의드립니다.

네 맞습니다.
아쉽게도 인가코드는 백엔드에서 발급 받을 수 없습니다. 현재 사용되는 OAuth2.0 스팩상 사용자의 동의 과정(인터렉션)이 반드시 필요하므로 사용자가 카카오 로그인 기능을 사용하여 전달 받으셔야만 합니다.

감사합니다.

org.springframework.web.reactive.function.client.WebClientResponseException$BadRequest: 400 Bad Request from POST https://kauth.kakao.com/oauth/token?grant_type=authorization_code&client_id=***&redirect_uri=http://localhost:3000/login/kakao&code=***

프론트 측에서 인가코드를 제대로 넘겨주고 있는 것 같은데 그러면 백 쪽에서 인가코드를 재사용해서 발생하는 문제일까요?

네, 맞습니다.
동일한 인가코드들 2번이상 사용하고 있습니다.

혹시 접근토큰 발급(/oauth/token) 호출이 두번 이루어지고 있는지 확인 부탁드리겠습니다.

네, 두번 호출되고 있습니다.

한번 호출되는 것으로 수정하였는데 현재는 401 오류가 나는 것 같습니다.

/oauth/token 호출 시 발생한 에러 Body 좀 확인해주실 수 있나요?

최근 요청은 성공한 것으로 확인됩니다.
참고로 서비스에서 body 내용을 직접 확인하실 수 있습니다.