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

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

Явный auth: response_type = code Неявный auth: response_type = access_token

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

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

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

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

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

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

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

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

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

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

Ответ 1

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

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

Ответ 2

Я просто пытался с неявным потоком oauth с моими client_id и scope = basic + нравится, и это сработало. Замените 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 не допускает возможность, отличную от базовой, с новыми учетными записями клиентов...

Ответ 3

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

В файле config/initializers/omniauth.rb:

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

Ответ 4

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

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

Сообщение относится к записи в блоге: http://developers.instagram.com/post/116410697261/publishing-guidelines-and-signed-requests

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

Ответ 5

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

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

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

Ответ 6

В это время, май 2015 года, ДА.

Как объясняется документация по instagram об аутентификации:

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

Сначала вам нужно зарегистрировать свое приложение здесь, а затем, используя идентификатор CLIENT, предоставленный 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

Ответ 7

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