2015-11-25 3 views
2

Я использую API-интерфейс Instagram и хочу получить access_token, чтобы вызывать запросы api через мою собственную учетную запись. Когда я пытаюсь выполнить первый шаг и программно получить код авторизации с помощью RestTemplate, я не могу заставить его работать.Аутентификация на Instagram для получения access_token с использованием API

String AUTHORIZE_URL = "https://api.instagram.com/oauth/authorize/?client_id=<CLIENT_ID>&redirect_uri=<REDIRECT_URI>&response_type=code"; 
String url = String.format(AUTHORIZE_URL, clientId, redirectUri); 
String o = restTemplate.getForObject(url, String.class); 

Ответом является HTML код страницы входа, потому что Instagram требует от пользователя войти в систему, чтобы проверить, если приложение имеет право (конечно, это, так как приложение пользователь принадлежит к моей учетной записи).

Как я могу пройти аутентификацию, прежде чем бросать этот запрос, чтобы они вернули код в мой redirectUri и не жаловались на логин? Примечание: Я пробовал имитировать запрос в своей форме входа, но он вернул 403 Запрещено.

ПРИМЕЧАНИЕ. У меня уже есть действительный access_token, сгенерированный вручную, и он отлично работает, но я хочу реализовать также процесс для нового генерации нового access_token автоматически, поскольку он может аннулировать его в любое время в будущем.

Хотя наши токены доступа не указывают время истечения срока действия, ваше приложение должно обрабатывать случай, когда либо пользователь отменяет доступ, либо Instagram истекает через токен через некоторое время. Если токен больше недействителен, ответы API будут содержать «error_type = OAuthAccessTokenError». В этом случае вам нужно будет повторно аутентифицировать пользователя, чтобы получить новый действительный токен. Другими словами: не предполагайте, что ваш access_token действителен навсегда.

ответ

0

Instagram обновляет свои API и потоки. Раньше нам нужен токен доступа, чтобы обойти принудительный экран входа в систему. Со вчерашнего дня они удалили это.

Теперь, если вы вызываете этот код, он проверяет, вошли ли вы в систему или нет. Если это так, он назовет ваш AUTHORIZE_URL и отправит код ответа. Формат будет либо:

Теперь то, что я делаю, я непосредственно вызов выше URL твоего каждый раз. Теперь, если пользователь вошел в систему, вам будет отправлен код ответа, иначе пользователю будет предложено войти в систему и подтвердить свое приложение, а затем код будет отправлен. Технически вы исключая возможность возникновения ошибки! Так что вам не нужно накладных расходов на хранение токена доступа в вашей базе данных или проверку его действительности.

Просто попробуйте сейчас проверить, что происходит.

PS: Если вы хотите проверить поведение API, просто введите URL-адрес в браузере и проверьте, что он возвращает! Это помогло мне во время кодирования и отладки! :)

+0

Я не буду использовать приложение с данными любого другого пользователя, кроме меня. Я просто хочу получить свою собственную информацию об учетной записи с помощью API. Таким образом, я просто хочу вызвать API для получения той информации, которая принадлежит моей учетной записи (той же учетной записи, где было создано приложение). Вот почему я не хочу показывать вход в экран, мне это не нужно.Весь процесс получения access_token должен быть автоматическим (от сервера к серверу), и он не потребует никакого взаимодействия с человеком. Спасибо за ваш ответ! –

+0

Просто позвоните по адресу доступа к instagram с вашим URL-адресом перенаправления uri, областью действия и кодом доступа. Запустите еще один API Instagram, который вернет токен доступа на основе этого кода, а затем вы сможете получать данные с конечными точками пользователя. – coderz

+0

PS: Используйте аутентификацию сервера как более безопасную (рекомендуется разработчиками Instagram, вызывая больше потоков). Если вам нужен токен прямого доступа, используйте неявный поток (менее безопасный). – coderz

Смежные вопросы