7월20일까지 카카오로그인API가 잘 되고 있었는데 갑자기 안되네요?

문의 시, 사용하시는 개발환경과 디벨로퍼스 앱ID를 알려주세요.


앱아이디 924229
사용환경 WEB
개발환경 PHP

갑자기 사용자profile을 못가져오는데 이유를 알 수 있을까요?

기존앱(924229) 에서 안되길래
테스트용으로 새로운앱(942791)을 생성해서 로그인API 테스트 해보았더니 잘 됩니다.

설정문제 아니면 알 수 없는 이유로 카카오에서 차단한게 아닐까 싶습니다.

확인 부탁드립니다.

924229 디벨로퍼스앱은 차단되지 않았고 최근 7일간 에러 발생 이력도 없습니다.

카카오로부터 받은 응답이 어떻게 되는지 확인 부탁드립니다.

개발자가 아니시라면, 사이트 URL 알려주세요.

https://enrichkor.com
입니다.
그누보드를 사용하였고
버전은 5.5 입니다.

Fatal error : Uncaught Exception: User profile request failed! Kakao returned an error: Exception: The Authorization Service has return: in /home/enrichkor/www/plugin/social/Hybrid/Providers/Kakao.php:120 Stack trace: #0 /home/enrichkor/www/plugin/social/Hybrid/Providers/Kakao.php(52): Hybrid_Providers_Kakao->authenticate() #1 /home/enrichkor/www/plugin/social/Hybrid/Endpoint.php(173): Hybrid_Providers_Kakao->loginFinish() #2 /home/enrichkor/www/plugin/social/includes/g5_endpoint_class.php(52): Hybrid_Endpoint->processAuthDone() #3 /home/enrichkor/www/plugin/social/Hybrid/Endpoint.php(55): G5_Hybrid_Endpoint->processAuthDone() #4 /home/enrichkor/www/plugin/social/Hybrid/Endpoint.php(72): Hybrid_Endpoint->__construct() #5 /home/enrichkor/www/plugin/social/includes/g5_endpoint.php(27): Hybrid_Endpoint::process() #6 /home/enrichkor/www/plugin/social/index.php(22): G5_Hybrid_Authentication::hybridauth_endpoint() #7 {main} in /home/enrichkor/www/plugin/social/Hybrid/Auth.php:169 Stack trace: #0 /home/enrichkor/www/plugin/social/Hybrid/Auth.php(55): Hybrid_Auth::initialize() #1 /home/enrichkor/www/plugin/social/includes/functions.php(91): Hybrid_Auth->__construct() #2 /home/enrichkor/www/plugin/social/includes/functions.php(479): social_login_get_provider_adapter() #3 /home/enrichkor/www/plugin/social/popup.php(20): social_check_login_before() #4 {main} thrown in /home/enrichkor/www/plugin/social/Hybrid/Auth.php on line 169

확인해보니 카카오측에는 에러가 없고, 기재해주신 error 를 보니

유저 정보 항목에 profile은 없고 profile_nickname, profile_image로 세분화되어 있는데 profile 값을 조회하다 해당 소셜 플러그인에서 에러 발생한 것으로 보입니다. (plugin/social/Hybrid/Providers/Kakao.php)

2021년 6월에 동의 항목 '프로필(닉네임/프로필 사진)'이 ‘닉네임’, '프로필 사진’으로 분리되었는데
해당 플러그인에 사용자 정보 가져오는 부분 예전 버전인듯하네요. 확인 부탁드려요.

닉네임/프로필 사진 동의 항목 분리 및 API 응답 변경사항 안내 / [Change Notice] Separation of consent items (nickname/profile image) and API response

호출주소 :
https://kauth.kakao.com/oauth/token

POST값
Array
(
[grant_type] => authorization_code
[client_id] => e768a7bd261588348d683bf9a9a9ef11
[redirect_uri] => https://enrichkor.com/plugin/social/?hauth.done=kakao
[code] => lO4yWw3w5lIGnNUSpQ7R1Yib9I3zrQ_UFI0yaGQzgG6ofhsq_lJsY9ZKncGTkjf6_ZAQsQopyNgAAAGJdlWQrQ
)

curl 에러 :
SSL: no alternative certificate subject name matches target host name ‘kauth.kakao.com

리턴값은 빈값으로 나오는데 이거랑 관련이 있을까요?

이 내용은 해당 웹사이트에서 반환한 정보인가요?

curl로 호출할때 반환한 값입니다.

OpenSSL 3.0.2 15 Mar 2022 (Library: OpenSSL 3.0.2 15 Mar 2022)
curl 7.81.0 (x86_64-pc-linux-gnu) libcurl/7.81.0 OpenSSL/3.0.2 zlib/1.2.11 brotli/1.0.9 zstd/1.4.8 libidn2/2.3.2 libpsl/0.21.0 (+libidn2/2.3.2) libssh/0.9.6/openssl/zlib nghttp2/1.43.0 librtmp/2.3 OpenLDAP/2.5.14
Release-Date: 2022-01-05

서버에 설치되어있는 openssl과 curl버전입니다.

로그를 보니 ‘kauth.kakao.com’에 /oauth/authorize 는 잘 처리되었고

/oauth/token 이 없는 걸 보니

https://enrichkor.com/plugin/social/?hauth.done=kakao 에서

호출을 못했거나 잘못한것으로 같긴하네요.


/oauth/token 호출하는 코드 블럭 공유 부탁드려요.

Kakao.php 에서 호출하였습니다.

private function authenticate($code)
    {
        $params = array(
            "grant_type"    => "authorization_code",
            "client_id"     => $this->api->client_id,
            "redirect_uri"  => $this->api->redirect_uri,
            "code"          => $code
        );

        if( $this->api->client_secret && ($this->api->client_secret !== $this->api->client_id) ){
            $params['client_secret'] = $this->api->client_secret;
        }

        $response = $this->request($this->api->token_url, $params, $this->api->curl_authenticate_method);
        $response = $this->parseRequestResult($response);
        
        if ( ! $response || ! isset($response->access_token) ) {
            throw new Exception("The Authorization Service has return: " . $response->error);
        }
        
        if ( isset($response->access_token) )  $this->api->access_token            = $response->access_token;
        if ( isset($response->refresh_token) ) $this->api->refresh_token           = $response->refresh_token;
        if ( isset($response->expires_in) )    $this->api->access_token_expires_in = $response->expires_in;

        // calculate when the access token expire
        if ( isset($response->expires_in) ) {
            $this->api->access_token_expires_at = time() + $response->expires_in;
        }

        return $response;
    }

    private function request($url, $params=false, $type="GET")
    {
        if(Class_exists('Hybrid_Logger')){
            Hybrid_Logger::info("Enter OAuth2Client::request( $url )");
            Hybrid_Logger::debug("OAuth2Client::request(). dump request params: ", serialize( $params ));
        }
        $this->http_info = array();
        $ch = curl_init();
echo print_r2($this->api->curl_header);
echo $url."<BR>";
        curl_setopt($ch, CURLOPT_URL           , $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_TIMEOUT       , $this->api->curl_time_out);
        curl_setopt($ch, CURLOPT_USERAGENT     , $this->api->curl_useragent);
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $this->api->curl_connect_time_out);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, $this->api->curl_ssl_verifypeer);
        curl_setopt($ch, CURLOPT_HTTPHEADER    , $this->api->curl_header);
        curl_setopt($ch, CURLOPT_FAILONERROR, true);

        if ( $this->api->curl_proxy ) {
            curl_setopt( $ch, CURLOPT_PROXY, $this->curl_proxy);
        }
        if ( $type == "POST" ) {
            curl_setopt($ch, CURLOPT_POST, 1);
            if ($params) curl_setopt( $ch, CURLOPT_POSTFIELDS, http_build_query($params) );
        }

        $response = curl_exec($ch);
        echo print_r2($params);
        echo print_r2($response);
        echo curl_error($ch);
        
        if(Class_exists('Hybrid_Logger')){
            Hybrid_Logger::debug( "OAuth2Client::request(). dump request info: ", serialize(curl_getinfo($ch)) );
            Hybrid_Logger::debug( "OAuth2Client::request(). dump request result: ", serialize($response ));
        }
        $this->http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        $this->http_info = array_merge($this->http_info, curl_getinfo($ch));
        curl_close ($ch);
exit;
        return $response;
    }

authenticate 메소드에서

$response = $this->request($this->api->token_url, $params, $this->api->curl_authenticate_method);

윗 부분에서 카카오 curl로 요청하는데 값이 없어서 인증을 못받고 에러가 나는거 같습니다.

확인완료 (1) $this->api->curl_authenticate_method 는 어떤 값을 전달하나요?

(2) ‘kauth.kakao.com’ 관련 현재 인증서 문제는 리포팅된바 없어서

운영하시는 서버 환경 종속적문제일듯한데요.

(3) 개발하신 코드상 변수가 있을지 확인 위해 아래 예제 정상 작동하는지 우선 확인 부탁드립니다.

[rest api 예제] php - 카카오 로그인, 카카오 친구목록 조회 및 카카오톡 메시지

확인완료 (4) echo curl_error($ch); 는 어떤 값이 나오나요?
확인완료 (5) $response = curl_exec($ch); 결과를 var_dump($response); 로 출력한 값도 공유 부탁드려요.

$this->api->curl_authenticate_method 는 POST입니다.

네이버로그인도 사용중이긴 한데
같은 curl 코드로 호출하고 있습니다만
리턴값이 나오는거 보면 curl 코드만의 문제는 아닌것 같거든요.

https://devtalk.kakao.com/t/rest-api-php/11
접속하면 이 페이지가 존재하지 않거나 비공개입니다. 라고 나옵니다.

넵. [rest api 예제] php - 카카오 로그인, 카카오 친구목록 조회 및 카카오톡 메시지 입니다.

$response = curl_exec($ch); 결과 => bool(false)
echo curl_error($ch); => SSL: no alternative certificate subject name matches target host name ‘kauth.kakao.com

https://kauth.kakao.com/oauth/token?grant_type=authorization_code&client_id=e768a7bd261588348d683bf9a9a9ef11&redirect_uri=https%3A%2F%2Fenrichkor.com%2Fkakao_rest_api_example.php&code=1CG8vYvbBR4UOJvkTWdrDYWxNNjL5fyQT0nfxNE9LN9AXxt0-7qTgM0JDFNk4jX8Q2LAXQoqJQ0AAAGJdoPaoA&client_secret=Wf6tmC7CtWE1rhwuDnSArUwYYkEEjfTk

0:

https://kapi.kakao.com/v2/user/me

0:

내 애플리케이션>제품 설정>카카오 로그인> 동의항목 : profile 필수 설정

예제를 실행한 결과 입니다.

curl_error 응답보면, kauth.kakao.com 호출을 못하는 문제는 맞는것 같은데…
예제 코드로도 curl_error 동일 한 에러 발생하는지 확인 부탁드려요.


서버에서 kauth.kakao.com로 ping은 가나요?

traceroute kauth.kakao.com 결과도 확인 부탁드려요.

ping은 멈춰있습니다.
ping kauth.kakao.com
PING kauth-51la0hs1.kgslb.com (27.0.237.15) 56(84) bytes of data.

traceroute to kauth.kakao.com (203.133.166.32), 30 hops max, 60 byte packets
1 _gateway (175.126.176.1) 0.634 ms 0.706 ms 1.273 ms
2 10.2.1.57 (10.2.1.57) 0.807 ms 0.865 ms 0.920 ms
3 172.16.123.25 (172.16.123.25) 0.541 ms 0.627 ms 0.784 ms
4 172.16.122.129 (172.16.122.129) 6.311 ms 6.373 ms 6.332 ms
5 * * *
6 * * *
7 * * *
8 * * *
9 * * *
10 * * *
11 * * *
12 * * *
13 * * *
14 * * *

서버 IP 알려주시겠어요?

kapi.kakao.com과 dapi.kakao.com 도 ping 한번씩 부탁드려요.

curl문제인거 같아서 guzzle로도 시도해보았는데 guzzle에서도 curl을 사용하더라고요

카카오톡 로그인이 7월20일까지 되고 안되길래

curl을 사용하는 다른 api들도 확인해보니 일부는 같은 증상으로 안되더라고요.

그래서 서버에 apt install libcurl4-openssl-dev 를 설치해줬더니 해결 되었습니다.

아직까지도 7월20일(어제) 까지는 되었는데 오늘 왜 안되었는지는 모르겠지만요…

친절한 응대 너무나 감사드립니다.

덕분에 해결되었습니다.

1개의 좋아요