Я пытаюсь использовать OAuth для Instagram для аутентификации, планируя использовать PHP и cURL. Первым шагом является получение «кода», например:
fd7d5f6cde6c47e4a86ba28b22ac4583
Я работал с Twitter API раньше, и он работает аналогичным образом. Я обмениваю код на access_token
и тогда я могу подтвердить подлинность.
Проблема в том, что способ аутентификации — нажать кнопку в окне с надписью «Я даю разрешение». Вот это окно:
Мой вопрос: есть ли способ сделать это, не требуя нажатия на этот URL?
Например, есть ли способ для меня автоматизировать этот процесс с помощью моего сценария? Когда я работал с Twitter, я мог использовать cURL, чтобы перейти по этой ссылке и пройти аутентификацию, чтобы затем получить этот код.
Это часть проекта, который будет использовать только я по сути, чтобы получить мои последние инстаграм. Я не хочу, чтобы посетителям моего сайта приходилось нажимать кнопку «авторизовать» каждый раз, когда они появляются.
На данный момент я просто делаю это, могу ли я что-то добавить к URL для автоматической авторизации?
$auth_request_url = 'https://api.instagram.com/oauth/authorize/?client_id='.$client_id.'&redirect_uri='.$redirect_url .'&response_type=code';
/* Send user to authorisation */
header("Location: ".$auth_request_url);
Ниже приведен пример кода это работает но только один раз:
$url = "https://api.instagram.com/oauth/access_token";
$access_token_parameters = array(
'client_id' => $client_id,
'client_secret' => $client_secret,
'grant_type' => 'authorization_code',
'redirect_uri' => $redirect_url,
'code' => $code
);
$curl = curl_init($url); // we init curl by passing the url
curl_setopt($curl,CURLOPT_POST,true); // to send a POST request
curl_setopt($curl,CURLOPT_POSTFIELDS,$access_token_parameters); // indicate the data to send
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // to return the transfer as a string of the return value of curl_exec() instead of outputting it out directly.
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); // to stop cURL from verifying the peer's certificate.
$result = curl_exec($curl); // to perform the curl session
curl_close($curl); // to close the curl session
$arr = json_decode($result,true);
Я получил $code
с конца URL вручную. Но это истекает после одного использования. Так что мне нужно решить, как запустить и получить $code
каждый раз, когда я хочу выполнить скрипт.
Утверждение требуется только в первый раз, когда ваш клиент запрашивает его у пользователя, и избежать этого невозможно. Вы получаете информацию от конечного пользователя, и было бы огромной дырой в безопасности, если бы клиенты могли получать эту информацию или разрешения от пользователей, не требуя их явного одобрения хотя бы один раз. Но после первого раза, согласие должно быть сохранено и повторно использовано для вашего клиента.
Я знаю, что это доброе старое, но я думаю:
После https://api.instagram.com/oauth/authorize/?client_id='.$client_id.'&redirect_uri='.$redirect_url .'&response_type=code';
он будет перенаправлен на ваш $redirect_url/?code=XXXXXXXXXXXXX
Таким образом, вы можете получить код по $code = $_GET['code']