2016-04-12 7 views
0

oAuth認証を持つAPIからデータを取得しようとしています。 私がやっているのは、server1(どこのアプリケーションがどこにあるか)からserver2への認証要求を送信して、アクセストークンを取得することです。次に、トークンをJS変数に入れ、APIエンドポイントにアクセスしようとしています。承認のために角2を送信する

私のjsのコードは次のようになります。

let headers = new Headers({ 'Authorization': "Bearer " + oAuthAccessToken }); 
let options = new RequestOptions({ headers: headers }); 
let url = "http://example.com/api/getSomething" 
this.http.post(url, body, options) 
    .subscribe(res => { 
     console.log(res.json()) 
}); 

問題は、私はいつも "401 Unathorized" を取得していますということです。 Chrome Dev Toolsの[ネットワーク]タブでリクエストを調べると、2つの奇妙なことがあります。まず、リクエストメソッドはOPTIONSではなく、ヘッダーの認証がありません。

私は間違っていると思いますか?ヘッダが設定されていないのはなぜですか?

編集:

問題は角度がPOST前にOPTIONSリクエストを送信し、私のアプリのファイアウォールが常に存在するようにAuthorizationヘッダーを期待していたということでした。このヘッダーはOPTIONSリクエストには存在しないため、私はUnauthorizedになりました。 OPTIONSリクエストで適切なヘッダーを送信するようにサーバーアプリケーションを変更しましたが、今はすべて問題ありません。

ありがとうございました。

+0

こんにちは、私はあなたがこの問題を解決するために何をしたか解決策を教えてください。私は同じものを得ている... –

答えて

1

ブラウザは、どのhttpメソッドが許可されているかを調べるようにしようと考えているので、最初のリクエストはOPTIONSメソッドのリクエストです。通常、バックエンドサービスはヘッダ内にAccess-Control-Allow-Methodsと応答します。その後、ブラウザは実際のリクエストを送信します。

私はあなたがクロスドメインリクエストを扱っているとCORSが、それは予想

1

として動作するはず許可する必要があると思い、ChromeはCORSヘッダを探すために要求をプリフライトれます。要求が受け入れ可能な場合、実際の要求を送信します。ので、オプションの要求は、サーバーサポートCORSをチェックするだけです。

https://stackoverflow.com/a/21783145/3279156

0

Content-Typeは以下のようにする必要があります:

let header= new Headers({'Content-type':'application/x-www-form-urlencode'});  
header.append('Authorization',"Bearer " + token); 
let opt= new RequestOptions({headers:header}); 
関連する問題