2017-01-02 4 views
0

Я разрабатываю приложение Spotify и хочу получить токен.Поток клиентских полномочий работает со скручиванием, но не в браузере

Я следую Client Credentials Flow и используя curl все работает отлично:

$ curl -H "Authorization: Basic YjU4Y...llYTQ=" \ 
-d grant_type=client_credentials \ 
https://accounts.spotify.com/api/token 
# Response: 
# { 
# "access_token":"BQD3u...W4iJA", 
# "token_type":"Bearer", 
# "expires_in":3600 
# } 

И здесь есть код Javascript моего HTML файла, в котором я пытаюсь получить тот же результат:

var url = "https://accounts.spotify.com/api/token"; 
var authentication = "YjU4Y...llYTQ="; 
var params = { grant_type: "client_credentials" }; 
var auth = "Basic " + authentication; 

$.ajax({ 
    url: url, 
    type: 'POST', 
    dataType: 'json', 
    headers: { 
     'Authorization' : auth, 
     'Access-Control-Allow-Origin': '*' 
    }, 
    data: params, 
    success: function(data) { 
     console.log('success', data); 
    } 
}); 

Однако я получаю следующую ошибку:

XMLHttpRequest cannot load https://accounts.spotify.com/api/token . Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access.

Что я делаю неправильно?

Есть ли способ использовать Spotify API из статического файла HTML с помощью Javascript?

+0

http://stackoverflow.com/questions/33188989/allowing-cors-jquery-post-requests-to-spotify-api-on-express-js-server/33198424#33198424 представляется актуальным. И https://github.com/spotify/web-api-auth-examples. И http://stackoverflow.com/users/540274/jos%C3%A9-m-p%C3%A9rez от Spotify, похоже, вокруг SO, отвечая на вопросы. – sideshowbarker

+0

Спасибо @sideshowbarker, но мне не нужен код на стороне сервера. –

+0

Если вы пытаетесь выполнить аутентификацию со стороны клиента, почему вы используете учетные данные клиента, для чего требуется приложение на стороне сервера из-за CORS вместо неявного предоставления? Возможно, я неправильно понял этот вопрос. –

ответ

2

Ничего. Браузеры запрещают CORS, если сервер специально не разрешает это. В вашем случае вы не контролируете сервер, поэтому у вас есть только один выбор - взломать браузер. Легко выполняется с помощью плагинов для Firefox и Chrome. Поиск CORS Everywhere для Firefox. Там один для chrome, также называемый контролем доступа, позволяет * или что-то в этом роде.

Поверьте мне ... Я потратил неделю, пытаясь использовать другой REST api. Попробовал js fetch и т. Д. Вы должны взломать браузер с помощью плагина.

+0

Но что Spotify хочет, чтобы разработчики делали в этих случаях? Взлом браузера швы временное решение. –

+0

Я не могу поговорить с Spotify в частности. Я никогда не смотрел на него. Посмотрите и посмотрите, публикуют ли они какую-либо документацию по API. Поиск "CORS". Это ваша проблема - CORS. –

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