私は現在使用している暗黙のグラントの代わりに認証コードフローを使用しようとしています。 Hereは両方のフローのドキュメントです。私はAngular 2アプリケーションからAPIを使用しています。最初の3つのステップはうまく行き、コールバックコールからコードを取得します。しかし、私がhttps://accounts.spotify.com/api/tokenへのポストコールをすると、コールがブラウザによって禁止されているウェブサイトを返すので、CORS例外が発生します。戻るページは、このリンクをクリックするのと同じですhttps://accounts.spotify.com/api/token。私はカールを使用してこのAPIを呼び出すことを試み、ここに私が気づくものがあります。 これを呼び出す:エラーまたはトークンの代わりにトークンポストコール返信エラーWebサイトをスクロール
curl -H "Authorization: Basic ZjM...zE=" -d grant_type=authorization_code -d code=MQCbtKe...44KN -d redirect_uri=https%3A%2F%2Fwww.foo.com%2Fauth https://accounts.spotify.com/api/token
それはエラーJSONメッセージを返し、無効なクライアントを訴えて。
データを削除すると、そのエラーHTMLページが返されます。
curl -H "Authorization: Basic ZjM...zE=" https://accounts.spotify.com/api/token
私のコードでは、問題は同じか、それと類似していると仮定します。だから、POST呼び出し本体にこれらのパラメータを設定してもよろしいですか?それは終点が私のパラメタをまったく得られないので、エラーメッセージを返さない理由です。 Hereはspotifyによって提供される例であり、ここでhereはAngular httpコンポーネントのドキュメントです。ここで
は私の活字体の呼び出しです:
var data = {
redirect_uri: this.config.redirectUri,
grant_type: 'authorization_code',
code : code
};
let headers = this.getTokenHeaders();
let address = "https://accounts.spotify.com/api/token";
return this.http.post(address,data, new RequestOptions({headers: headers}))
.toPromise()
.then(res =>
{
let body = res.json();
localStorage.setItem('spotify-access-token', body.access_token);
localStorage.setItem('spotify-refresh-token', body.refresh_token);
var expiresIn = body.expires_in;
return true;
})
.catch(err=>
{
return false;
});
getTokenHeaders()
{
return new Headers(this.accountAuth());
}
private accountAuth(): Object {
var auth = {
'Authorization': 'Basic ' + (new Buffer(this.config.clientId + ':' + this.config.clientSecret).toString('base64')),
'Content-Type': 'application/x-www-form-urlencoded'
//'Content-Type':'application/json'
};
return auth;
}
私はx-www-form-urlencodedで/アプリケーション/ JSONやアプリケーションへのContent-Typeを設定しようとしています。