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"