Возврат Instagram "Код соответствия не был найден или уже использовался" при использовании OAuth

Я пытаюсь использовать Instagram OAuth, используя документацию разработчика в

https://www.instagram.com/developer/authentication/.

Шаг 1 и 2 работают без проблем, поэтому у меня есть Client-ID, Client-Secret, Redirect-URI и код.

Но каждый раз, когда я пытаюсь получить Acces Token, я получаю следующую ошибку:

{
"code": 400, 
"error_type": "OAuthException", 
"error_message": "Matching code was not found or was already used."
}

Любые подсказки, как это решить?

Ответ 1

Мы сталкиваемся с той же проблемой. Похоже, что выход из Instagram, а затем попытка использовать Instagram OAuth через наш сайт после выхода из Instagram - это обходной путь.

Ответ 2

Мы сталкиваемся с той же проблемой со вчерашнего дня (после нескольких месяцев работы) - вчера сообщали об этом как о проблеме "Сообщить о проблеме" на https://www.instagram.com/developer/clients/manage/, и я бы посоветовал вам сделать то же самое.

Тем не менее, чтобы услышать, но кажется вероятным, что их конец имеет проблемы, а не то, что мы делаем.

EDIT: он также отлично работает для нас на наших серверах разработки (которые используют разные IP-адреса для взаимодействия с IG API), но не работает на нашем производственном сервере с любого из доступных нам IP-адресов на рабочем сервере.

EDIT2: (июль 2016 года) Просто протестирован, и он загадочно снова начал работать на наших производственных серверах. Нет ответа на билет поддержки от Instagram.

EDIT3: (декабрь 2016) И теперь он снова не работает с тем же сообщением... Похоже, что Instagram снова закончил. Мы ничего не можем сделать. Разочарование.

Ответ 3

Войдите в Instagram, затем выполните Шаг 1 из Документов API (https://api.instagram.com/oauth/authorize/?client_id=CLIENT-ID&redirect_uri=REDIRECT-URI&response_type=code), затем выполните перенаправление и копирование кода из URL-адреса, затем выйдите из моей учетной записи, а затем выполните Шаг 3:

curl -F 'client_id=CLIENT_ID' \
-F 'client_secret=CLIENT_SECRET' \
-F 'grant_type=authorization_code' \
-F 'redirect_uri=AUTHORIZATION_REDIRECT_URI' \
-F 'code=CODE' \
https://api.instagram.com/oauth/access_token

Это сработало для меня.

Ответ 4

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

Ответ 5

Обновление: Удалено все мои истории просмотров, очищенный кеш и т.д. Как будто это был совершенно новый браузер, и теперь он работает без проблем.

Я уже много недель набираю URL-адрес для авторизации. Тестирование и использование одного и того же сохраненного токена для повторной авторизации. Может быть, хранящиеся токены имеют ограничение на количество повторений их использования?

======

Имея ту же самую проблему на сегодняшний день. Авторизация работала отлично раньше - теперь я получаю тот же ответ "Соответствующий код...".

Снова и снова входили в мою учетную запись Instagram, создавали новый идентификатор приложения и отключили/активировали Implicit Oauth - все без успеха.

В представлении "Авторизованные приложения" в моей учетной записи Instagram сообщается, что мое приложение действительно разрешено, но я не могу звонить в API. Аутентификация через окно Incognito вернула успешный ответ, но это не решение.

Попробовал отчет в Instagram через форму "Сообщить о проблеме", но он не позволит мне отправить форму.

Ответ 6

РЕШИТЬ! Просто выйдите из Instagram и повторите попытку. Это сработало для меня.

Ответ 7

Я решил это, создав службу на стороне сервера/сервера, которая разрешала пользователю.

My backend API - это рубиновое приложение для рельсов. Вот фрагмент кода для понимания.

  def token
    @response = Instagram.get_access_token(params[:code], redirect_uri: mobile_token_url)
    instagram_user = InstagramUserCreator.new(user_params)
    if instagram_user.find_or_create
      redirect_to "taddarmobileapp://?token=#{instagram_user.user.token}"
    else
      redirect_to 'taddarmobileapp://'
    end
  end

Я просто храню токен на телефоне и использую его для авторизации пользователя в моем backend API.