2017-07-06 3 views
0

私は現在使用している暗黙のグラントの代わりに認証コードフローを使用しようとしています。 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を設定しようとしています。

答えて

0

この回答はhttps://stackoverflow.com/a/28406268/8081009であり、サーバー側から試してみましたが、パラメータの配信にメッセージ本文を使用したときも同じエラーページが表示されていました。その後、私はこのようなURLにパラメータを変更しました:

var url = "/api/token?redirect_uri=http://localhost:8080/callback.html&grant_type=authorization_code&code="+code; 

私は正しいメッセージを得ています。うまくいけば、これは誰かを助ける。

クライアントサイドからapi/tokenを使用して、urlにパラメータを設定しないでください。

関連する問題