[解決済み] CORS: 認証モードは 'include' です。
質問
そう、私はあなたが何を考えているか知っています - また別の CORS の質問です。
まず始めに、実際のエラーメッセージをご覧ください。
XMLHttpRequest は http://localhost/Foo.API/token を読み込むことができません。レスポンスの レスポンスに含まれる 'Access-Control-Allow-Origin' ヘッダーの値は、リクエストの際にワイルドカード '*' であってはなりません。 がワイルドカード '*' でない場合、リクエストの の認証モードが 'インクルード' . Origin 'http://localhost:5000'へのアクセスは許可されていません。 にアクセスすることができます。によって開始されるリクエストの資格情報モードは、withCredentials 属性によって制御されます。 XMLHttpRequest によって開始されるリクエストの認証モードは withCredentials 属性によって制御されます。
が何を意味しているのかよくわかりません。 資格情報モードは 'include' です。 ?
というわけで、postmanでリクエストを実行すると、以下のようになります。 はありません。 といったエラーが発生します。
しかし、私がangularjsのウェブアプリから同じリクエストにアクセスすると、私はこのエラーでつまずく。以下は、私のangualrjsリクエスト/レスポンスです。ご覧の通り、レスポンスは
OK 200
ですが、私はまだCORSエラーを受け取っています。
Fiddlerのリクエストとレスポンスです。
次の画像は、WebフロントエンドからAPIへのリクエストとレスポンスを示しています。
つまり、私がネットで読んだ他のすべての投稿に基づくと、それは は のように、私は正しいことをやっている、それがエラーを理解できない理由です。最後に、以下は私がangualrjs内で使用しているコードです(ログインファクトリ)。
APIでのCORSの実装 - 参照目的。
方法1を使用。
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
EnableCrossSiteRequests(config);
}
private static void EnableCrossSiteRequests(HttpConfiguration config)
{
var cors = new EnableCorsAttribute("*", "*", "*")
{
SupportsCredentials = true
};
config.EnableCors(cors);
}
}
方法2を使用。
public void Configuration(IAppBuilder app)
{
HttpConfiguration config = new HttpConfiguration();
ConfigureOAuth(app);
WebApiConfig.Register(config);
app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
app.UseWebApi(config);
}
どのように解決するのですか?
この問題は、Angularのコードに起因しています。
いつ
withCredentials
が true に設定されている場合、リクエストと一緒に認証情報または Cookie を送信しようとしています。これは別のオリジンが潜在的に認証されたリクエストを行おうとしていることを意味するので、ワイルドカード ("*") は "Access-Control-Allow-Origin" ヘッダーとして許可されません。
これを動作させるには、"Access-Control-Allow-Origin" ヘッダーで、リクエストを行ったオリジンを明示的に応答する必要があるでしょう。
認証されたリクエストを行うことを許可したいオリジンを明示的にホワイトリスト化することをお勧めします。リクエストのオリジンで単に応答すると、ユーザーがたまたま有効なセッションを持っている場合、任意の Web サイトがバックエンドに認証された呼び出しを行うことができることを意味するからです。
この内容については この記事 ちょっと前に書いた。
ということで
withCredentials
を false に設定するか、オリジン ホワイトリストを実装して、クレデンシャルが関与する場合は常に有効なオリジンで CORS リクエストに応答します。
関連
-
[解決済み] あるJavaScriptファイルを他のJavaScriptファイルにインクルードするにはどうすればよいですか?
-
[解決済み] 私のJavaScriptコードは "No 'Access-Control-Allow-Origin' header is present on requested resource "というエラーを受け取りますが、Postmanはそうならないのはなぜですか?
-
[解決済み] REST APIからデータを取得しようとしたときに、要求されたリソースに'Access-Control-Allow-Origin'ヘッダーが存在しない。
-
[解決済み] プリフライト要求に対する応答がアクセス制御チェックを通過しない
-
[解決済み] CORSです。資格情報フラグが true の場合、Access-Control-Allow-Origin でワイルドカードを使用できない。
-
[解決済み】http://localhost CORS originが機能しないのはなぜですか?
-
[解決済み】CORS(cross-origin resource sharing)投稿リクエストを動作させる方法
-
[解決済み] 配列からオブジェクトを生成する
-
[解決済み] javascriptで2つの数値を連結する方法は?
-
[解決済み] jQueryの$という記号の意味は何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] javascriptで2つの数値を連結する方法は?
-
[解決済み] 文字列が空白であるかどうかをチェックする
-
[解決済み] オブジェクトの配列からReactコンポーネントをレンダリングする
-
[解決済み] JavaScriptのtoString()関数をオーバーライドして、デバッグ用に意味のある出力を提供することは可能でしょうか?
-
[解決済み] 無効になっている入力フィールドの値を送信する
-
[解決済み] JavaScriptでの大文字小文字を区別しない正規表現
-
[解決済み] Node.jsのES6クラスをrequireで作る
-
[解決済み] <ng-content>が空かどうかを確認する方法は?(これまでのAngular 2+で)
-
[解決済み] V8 Javascript エンジンのスタンドアロン実行
-
[解決済み] 変異を伴わないオブジェクトからの値の削除