はい、あなたが何を考えているかはわかっています。また別の CORS の質問ですが、今回は困惑しています。
まず、実際のエラー メッセージは次のとおりです。
XMLHttpRequestはhttp://localhost/Foo.API/tokenをロードできません。リクエストのレスポンスの「Access-Control-Allow-Origin」ヘッダーの値はワイルドカード「*」であってはなりません。資格情報モードは「include」ですしたがって、オリジン 'http://localhost:5000' はアクセスが許可されません。XMLHttpRequest によって開始されたリクエストの資格情報モードは、withCredentials 属性によって制御されます。
どういう意味か分かりませんが資格情報モードは「include」です?
だから、Postmanでリクエストを実行すると、いいえこのようなエラー:
しかし、AngularJS Web アプリから同じリクエストにアクセスすると、このエラーに困惑します。これが私の 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);
}
ベストアンサー1
この問題は Angular コードに起因しています:
true に設定されている場合withCredentials
、リクエストとともに資格情報または Cookie を送信しようとします。これは、別のオリジンが認証されたリクエストを実行しようとしている可能性があることを意味するため、ワイルドカード (「*」) は「Access-Control-Allow-Origin」ヘッダーとして許可されません。
これを機能させるには、「Access-Control-Allow-Origin」ヘッダーでリクエストを行ったオリジンを明示的に応答する必要があります。
認証されたリクエストを許可するオリジンを明示的にホワイトリストに登録することをお勧めします。これは、リクエストのオリジンで応答するだけでは、ユーザーが有効なセッションを持っている場合に、任意の Web サイトがバックエンドに対して認証された呼び出しを実行できるためです。
私はこれについて次のように説明するこの記事少し前に書きました。
したがって、withCredentials
falseに設定するか、オリジンホワイトリストを実装して、資格情報が関係する場合は常に有効なオリジンでCORSリクエストに応答することができます。