2013-12-04 3 views
2

Контекст

Я пытаюсь получить маркер доступа из API Instagram, используя их server-side/explicit flow.Instagram API access_token запрос и Access-Control-Allow-Origin

Когда пользователь успешно аутентифицирует и авторизует мое приложение, Instagram перенаправляет пользователя на мой redirect_uri с кодом параметра а. Как только у меня есть этот код, я пытаюсь вызвать Instagram API, чтобы получить access_token.

Проблема

я успешно получить этот код, но для того, чтобы сделать этот обмен, я должен POST кода, наряду с некоторыми параметрами идентификации приложения к их access_token конечной:

$.ajax({ 
    type: 'POST', 
    url: 'https://api.instagram.com/oauth/access_token', 
    // Disable credentials as they were enabled by default 
    xhrFields: { 
     withCredentials: false 
    }, 
    crossDomain: true, 
    data: { 
     client_id: client_id, 
     client_secret: client_secret, 
     grant_type: 'authorization_code', 
     redirect_uri: callback_http, 
     code: token 
    }, 
    }).always(function(res) { 
    console.log('Res from Instagram API', res); 
    }); 

проблема заключается в том, что я получаю Access-Control-Allow-Origin вопрос:

XMLHttpRequest cannot load https://api.instagram.com/oauth/access_token. 
No 'Access-Control-Allow-Origin' header is present on the requested resource. 
Origin '[here is my callback_http]' is therefore not allowed access. 

Я попытался использовать dataType: 'jsonp' как параметр вызова Ajax без каких-либо успехов (код 401).

Любые идеи? Большое вам спасибо за вашу помощь!

+0

Server-side означает, что к нему необходимо получить доступ со своего сервера :) –

ответ

0

Вы должны использовать код сервера для oauth при использовании явного потока serveride, который блокируется браузером из-за запроса на перекрестный запрос. если вы хотите использовать только javascript, используйте неявный поток клиентской стороны

+0

Хорошо, я вижу. Возможно, у вас есть какие-либо объяснения, почему этот точный поток (соединение между серверным кодом благодаря NodeJS/Express-маршрутизации и Javascript) работает для Dropbox, но не для Instagram? –

+0

не уверен, что их заголовок имеет Access-Control-Allow-Origin: *. Также вы делаете вышеупомянутый вызов ajax для instagram в узле ?, тогда он должен работать. – krisrak

+0

Это было бы лучшим объяснением. Фактически нет: - Узел соответствует маршруту после перенаправления Instagram; - затем выводит HTML-страницу, на которой сделан вышеуказанный вызов Ajax. Я вынужден сделать это, так как хочу POST access_token в свой API. Каждый вызов моего API должен быть подписан (благодаря куки-файлам), поэтому он создается с клиентской стороны. –

0

вы не можете, если его размещение в вашем домене или у вас есть URL.

вы можете обратиться к этой http://en.wikipedia.org/wiki/Same-origin_policy

, если вы являетесь владельцем сервера, который вы можете использовать Htaccess, чтобы решить вашу проблему. вопрос о том, как решить это в stackoverflow также ..

Счастливое кодирование! : D

Смежные вопросы