asp.net-core
クロスオリジン要求(CORS)
サーチ…
備考
ブラウザセキュリティは、WebページがAJAX要求を別のドメインに作成するのを防ぎます。この制限は同じ発信元ポリシーと呼ばれ、悪意のあるサイトが他のサイトから機密データを読み取ることを防止します。しかし、他のサイトがWebアプリにクロスオリジンのリクエストを行うことを許可することがあります。
Cross Origin Resource Sharing(CORS)は、サーバーが同じ発信元ポリシーを緩和できるようにするW3C標準です。 CORSを使用すると、サーバーは他のものを拒否しながら、いくつかのクロスオリジン要求を明示的に許可できます。 CORSは、以前のJSONPなどの技術よりも安全で柔軟性があります。
すべての要求に対してCORSを有効にする
Configure
メソッドのIApplicationBuilder
でUseCors()
拡張メソッドを使用して、すべての要求にCORSポリシーを適用します。
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddCors();
}
public void Configure(IApplicationBuilder app)
{
// Other middleware..
app.UseCors(builder =>
{
builder.AllowAnyOrigin()
.AllowAnyHeader()
.AllowAnyMethod();
});
// Other middleware..
app.UseMvc();
}
特定のコントローラでCORSポリシーを有効にする
特定のコントローラに対して特定のCORSポリシーを有効にするには、 ConfigureServices
メソッド内のAddCors
拡張でポリシーを構築する必要があります。
services.AddCors(cors => cors.AddPolicy("AllowAll", policy =>
{
policy.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader();
}));
これにより、コントローラにポリシーを適用することができます。
[EnableCors("AllowAll")]
public class HomeController : Controller
{
// ...
}
より洗練されたCORSポリシー
ポリシービルダーを使用すると、洗練されたポリシーを構築できます。
app.UseCors(builder =>
{
builder.WithOrigins("http://localhost:5000", "http://myproductionapp.com")
.WithMethods("GET", "POST", "HEAD")
.WithHeaders("accept", "content-type", "origin")
.SetPreflightMaxAge(TimeSpan.FromDays(7));
});
このポリシーでは、 GET
、 POST
、およびHEAD
メソッドのみを使用した発信元http://localhost:5000
およびhttp://myproductionapp.com
のみが許可され、 accept
、 content-type
およびorigin
HTTPヘッダーのみが受け入れられます。 SetPreflightMaxAge
メソッドをSetPreflightMaxAge
すると、ブラウザは、プリフライトリクエスト( OPTIONS
)の結果を指定された時間キャッシュにキャッシュします。
すべてのコントローラでCORSポリシーを有効にする
すべてのMVCコントローラでCORSポリシーを有効にするには、ConfigureServicesメソッド内のAddCors拡張モジュールにポリシーを作成してから、 CorsAuthorizationFilterFactory
ポリシーを設定するCorsAuthorizationFilterFactory
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Cors.Internal;
...
public void ConfigureServices(IServiceCollection services) {
// Add AllowAll policy just like in single controller example.
services.AddCors(options => {
options.AddPolicy("AllowAll",
builder => {
builder.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader();
});
});
// Add framework services.
services.AddMvc();
services.Configure<MvcOptions>(options => {
options.Filters.Add(new CorsAuthorizationFilterFactory("AllowAll"));
});
}
public void Configure(IApplicationBuilder app) {
app.useMvc();
// For content not managed within MVC. You may want to set the Cors middleware
// to use the same policy.
app.UseCors("AllowAll");
}
このCORSポリシーは、コントローラまたはアクション単位で上書きできますが、アプリケーション全体のデフォルトを設定できます。