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"