Php curl 사용시에만 invalid_client 에러가 발생됩니다

안녕하세요
카카오 로그인 기능을 사용하고자 테스트 중인데요 계속 invalid_client 에러가 발생되네요.

POST /oauth/token HTTP/1.1
Host: kauth.kakao.com
Content-type: application/x-www-form-urlencoded;charset=utf-8

사용자의 code를 사용해서 토큰을 받아오는 부분에서 리턴값에
WWW-Authenticate: Bearer realm=“oauth”, error=“invalid_client”, error_description="Bad client credentials"
이와 같은 오류가 발생됩니다.

그래서 혹시나 다른 환경에서도 같은 오류가 발생될까 궁금해 동일한 인자값으로 리눅스하고 웹(https://resttesttest.com/)에서 테스트 했는데 이때는 오류가 안나고 정상적으로 처리가 됐습니다.

테스트하면서 사용한 php 코드는 다음과 같습니다.

$data = [
‘client_id’ => $this->client_id,
‘redirect_uri’ => $this->login_url,
‘code’ => $code,
‘grant_type’ => ‘authorization_code’,
];

$url = ‘https://kauth.kakao.com/oauth/token’;
$header[] = ‘Content-Type: application/x-www-form-urlencoded; charset=utf-8’;

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt ($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec ($ch);

php curl 을 사용할때 기존하고 다른방식의 세팅이 필요한거 같은데 어떻게 처리하면 좋을까요?
php curl 샘플 예시 같은게 있으면 좋겠습니다 ㅡㅜ

@backho79

확인을 위해, 디벨로퍼스 앱 정볼르 말씀해 주시기 바랍니다.

앱 ID는 425282 입니다.

@backho79

해당 앱의 요청기록을 확인해 보니,
한번 발급된 CODE 값 으로 여러번의 토큰 발급 요청을 하셨습니다.
CODE값은 발급 이후 한번만 사용 가능하며, 이후 같은 CODE 값으로 토큰발급 요청 시, 에러응답이 전달됩니다.
자세한 내용은 개발자 문서를 참고하시기 바랍니다.
https://developers.kakao.com/docs/latest/ko/kakaologin/rest-api#request-token

흠 해당부분 문제는 아닐꺼 같습니다.
code 값이 항상 변경 되어도 에러는 항상 error=“invalid_client” 입니다. (php에서 테스트 할때는)

말씀하신 부분은 다른 오류값을 받기 위해서 code 변경없이 반복 테스트를 해서 그런거 같습니다.
만약 해당 부분이 문제라면 invalid_client에러가 아니고 invalid_grant 에러가 와야될꺼 같습니다.
한번 더 확인 부탁드립니다 ㅡㅜ

@backho79

요청 측 서버의 ip를 말씀해 주시겠어요?

안되는 이유를 찾았습니다 ㅡㅜ
보통 php curl_setopt 사용할때
$data = [
‘client_id’ => $this->client_id,
‘redirect_uri’ => $this->login_url,
‘code’ => $code,
‘grant_type’ => ‘authorization_code’,
];
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

이런식으로 사용하는데 카카오쪽 통신할때는 해당 방식으로 안되고 쿼리 스크링으로 변경해줘야되네요

$data = [
‘client_id’ => $this->client_id,
‘redirect_uri’ => $this->login_url,
‘code’ => $code,
‘grant_type’ => ‘authorization_code’,
];
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
이렇게 변경해서 문제 해결했습니다.

답변 감사합니다 ^^

2개의 좋아요