Как исправить: утвержденное приложение получает сообщение «Ошибка аутентификации клиента» при обмене кодом авторизации для токена доступа — только на сервере

#php #linkedin

#php #LinkedIn

Вопрос:

Локально я могу авторизовать свое приложение через LinkedIn, но на сервере происходит сбой. Я проверил, что это один и тот же код, выполняемый на обоих.

Я отправляюсь в LinkedIn, авторизовываю приложение, но затем, когда я пытаюсь обменять код на токен, я получаю:

{«ошибка»: «invalid_client»,»error_description»: «Ошибка аутентификации клиента»}

Я проверил, что все секреты одинаковы и т. Д., И я убедился, что используются TLS 1.2 и https. Я не могу объяснить какие-либо различия.

Здесь происходит сбой:

 $curl = curl_init();

$arr = array();
$arr['grant_type'] = 'authorization_code'; //   The value of this field should always be: authorization_code
$arr['code'] = $_GET['code']; //    The authorization code you received in Step 2.
$arr['redirect_uri'] = SITE_ROOT.'/checkout/linkedin'; //   The same redirect_uri value that you passed in the previous step.   Yes
$arr['client_id'] = LINKEDIN_CLIENT_ID; //  The Client ID value generated in Step 1.
$arr['client_secret'] = LINKEDIN_CLIENT_SECRET; //  The Secret Key value generated in Step 1. See the Best Practices Guide for ways to keep your client_secret value secure.

//Get Authorization
curl_setopt_array($curl,  array(CURLOPT_VERBOSE => true, CURLOPT_RETURNTRANSFER => TRUE, CURLOPT_URL => 'https://www.linkedin.com/oauth/v2/accessToken', CURLOPT_POST => 1, CURLOPT_HTTPHEADER => array('Content-Type: application/x-www-form-urlencoded'), CURLOPT_POSTFIELDS => http_build_query($arr)));
$resp = curl_exec($curl);
$resp_decode = json_decode($resp);
$access_token = $resp_decode->access_token;
curl_close($curl);
 

Я ожидаю получить токен авторизации, но вместо этого (опять же, только на сервере) я получаю:

{«ошибка»: «invalid_client»,»error_description»: «Ошибка аутентификации клиента»}

Любая помощь будет с благодарностью принята.

Комментарии:

1. предположение: возможно, сертификат сервера недействителен или отсутствует….

2. Еще одно предположение: вероятно, для этого требуется указать, с каких доменов пользователи могут входить в ваше приложение, или какие URL-адреса являются допустимыми URI перенаправления, и вы забыли настроить это соответствующим образом для вашей живой системы …?

3. @ 04FS перенаправление определенно правильное, это после того, как оно успешно перенаправлено обратно.

4. @FatFreddy сертификат для моего сайта проверяется при проверке SSL, но будет ли это вообще иметь значение, если я делаю запрос от curl?

5. ну, может быть… при работе с ssl и tls… посмотрите на php.net/manual/en/function.curl-setopt.php и опция CURLOPT_SSL_VERIFYHOST, CURLOPT_SSLCERT, CURLOPT_SSLCERTPASSWD и CURLOPT_SSLCERTTYPE