API Instagram: работают ли области с потоком неявной аутентификации OAuth2?

Я делаю запросы к API Instagram из мобильного приложения. В настоящее время я просто направляю пользователя на url-адрес аутентификации Instagram и указываю тип ответа "access_token". Указывая эту response_type называется неявной авт.

явная аутентификация: response_type=code Неявные авт: response_type=маркер доступа

Я пытаюсь обойти необходимость встать на веб-службу, чтобы облегчить явную аутентификацию. Это было бы необходимо, потому что в явном виде auth flow, API Instagram должен сделать вызов URL-адреса перенаправления и передать параметр "код". Затем код будет использоваться моим кодом на стороне сервера, чтобы сделать окончательный запрос в Instagram для токена доступа.

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

Instagram поддерживает следующие области:

  • basic-для чтения любых данных связанные с пользователем (например following / followed-по спискам, фотографиям и т. д.) (предоставляется по умолчанию)
  • комментарии-создание или удаление комментариев от имени пользователя
  • отношения-следовать и отменить подписку пользователей от имени пользователя
  • нравится-нравится и в отличие от элементов от имени пользователя

когда я делаю любой другой тип спецификации области, кроме "basic" , я получаю следующий ответ, когда пользователь предоставляет учетные данные при аутентификации URL-адрес:

{"code": 400, "error_type": "OAuthException", "error_message": "Invalid scope field(s): basic+likes"}

любая комбинация областей, отличных от" basic", дает тот же ответ.

Итак, мой вопрос таков:

  • требуется ли явная аутентификация для указания областей за пределами "basic"??
  • нужно ли указывать response_type=code для работы расширенных областей?
  • это ограничение Instagram, или это ограничение OAuth 2.0?

спасибо заранее.

7 ответов


Я просто попытался с неявным потоком oauth с моим client_id и scope=basic+likes, и это сработало. Замените url-адрес ниже на client_id и redirect_uri и попробуйте.

https://instagram.com/oauth/authorize/?client_id=CLIENT_ID&redirect_uri=REDIRECT-URI&response_type=token&scope=basic+likes

может быть Instagram не позволяет область, отличную от basic с новыми учетными записями клиентов...


ответ здесь в том, что да, области могут быть запрошены неявным потоком аутентификации просто отлично. Моя проблема была связана с компонентом OAuth, который я использовал. Компонент был молчаливо URL-кодирование значения области param, который был отклонен конечной точкой аутентификации Instagram. Я обновил компонент (Xamarin.Auth) для размещения некодированный область param и выдал запрос.

спасибо @krisak за предоставление рабочего URL-адреса, который я мог бы тест.


поэтому у меня были похожие проблемы с кодировкой + при попытке получить разрешение для нескольких областей (basic, likes, comments). Решение, которое я нашел, состояло в использовании пробелов между отдельными областями:

в config / initializers / omniauth.файл rb:

Rails.application.config.middleware.use OmniAuth::Builder do
    provider :instagram, 'TOKEN', 'SECRETKEY' , {:scope => "basic likes comments"}
end

к сожалению, начиная с 14 апреля 2015 года новые клиенты не могут получить доступ к любой области, но basic. Официальное сообщение можно найти на странице конфигурации клиента:

начиная с 14 апреля 2015 года новые клиенты должны запросить доступ, чтобы иметь возможность публиковать лайки, следовать и комментарии. Для получения дополнительной информации, пожалуйста, прочитайте блог разработчика наhttp://developers.instagram.com.

сообщение ссылается на следующий блог запись: http://developers.instagram.com/post/116410697261/publishing-guidelines-and-signed-requests

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


У меня такая же проблема я нашел это решение, и работает отлично

перейти к управлению клиентами под instagram / developer. Затем нажмите "Изменить" в приложении и снимите флажок "Отключить неявный OAuth". Теперь он будет работать по назначению.

Instragram изменил это по какой-то причине, поэтому, вероятно, следует подумать дважды, прежде чем публиковать свое приложение:http://instagram.com/developer/restrict-api-requests/


в это время май 2015 да.

Как пояснила документация instagram о проверки подлинности:

API Instagram использует протокол OAuth 2.0 для простого, но эффективная аутентификация и авторизация. OAuth 2.0 намного проще использовать чем предыдущие схемы и разработчики могут начать использовать Instagram API почти сразу. Единственное, что нужно иметь в виду, это что все запросы к API должны быть сделаны за SSL (https: / / нет http.)//:

сначала необходимо зарегистрировать приложение здесь и затем, с идентификатором клиента, предоставленным instagram, вы можете сделать этот запрос:

https://api.instagram.com/oauth/authorize/?client_id=CLIENT-ID&redirect_uri=REDIRECT-URI&response_type=code

где вы должны поставить свой client_id и redirect_uri.

просто для информации, в поле redirect_uri вы можете вставить также

http://localhost

вы должны добавить " + "между областями, такими как"basic+comments+follower_list+likes+public_content+Relations"