asp.net-core
Wnioski o pochodzenie (CORS)
Szukaj…
Uwagi
Zabezpieczenia przeglądarki uniemożliwiają stronie internetowej wysyłanie żądań AJAX do innej domeny. To ograniczenie nazywa się zasadą tego samego pochodzenia i uniemożliwia złośliwemu serwisowi odczytanie poufnych danych z innego serwisu. Czasami jednak możesz chcieć zezwolić innym stronom na przesyłanie żądań dotyczących różnych źródeł do Twojej aplikacji internetowej.
Udostępnianie zasobów między źródłami (CORS) to standard W3C, który umożliwia serwerowi złagodzenie zasad tego samego pochodzenia. Korzystając z CORS, serwer może jawnie zezwalać na niektóre żądania dotyczące różnych źródeł, a inne odrzucać. CORS jest bezpieczniejszy i bardziej elastyczny niż wcześniejsze techniki, takie jak JSONP.
Włącz CORS dla wszystkich żądań
Użyj metody rozszerzenia UseCors()
na IApplicationBuilder
w metodzie Configure
, aby zastosować IApplicationBuilder
CORS do wszystkich żądań.
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();
}
Włącz zasady CORS dla określonych kontrolerów
Aby włączyć określoną zasadę CORS dla określonych kontrolerów, musisz zbudować AddCors
rozszerzeniu AddCors
w ramach metody ConfigureServices
:
services.AddCors(cors => cors.AddPolicy("AllowAll", policy =>
{
policy.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader();
}));
Umożliwia to zastosowanie zasad do kontrolera:
[EnableCors("AllowAll")]
public class HomeController : Controller
{
// ...
}
Bardziej wyrafinowane zasady CORS
Narzędzie do budowania polityk pozwala budować wyrafinowane polityki.
app.UseCors(builder =>
{
builder.WithOrigins("http://localhost:5000", "http://myproductionapp.com")
.WithMethods("GET", "POST", "HEAD")
.WithHeaders("accept", "content-type", "origin")
.SetPreflightMaxAge(TimeSpan.FromDays(7));
});
Ta zasada zezwala tylko na początkowe http://localhost:5000
i http://myproductionapp.com
tylko z metodami GET
, POST
i HEAD
i akceptuje tylko nagłówki HTTP accept
, content-type
i origin
. Metoda SetPreflightMaxAge
powoduje, że przeglądarki buforują wynik żądania kontroli wstępnej ( OPTIONS
), które mają być buforowane przez określony czas.
Włącz zasady CORS dla wszystkich kontrolerów
Aby włączyć zasadę CORS na wszystkich kontrolerach MVC, musisz zbudować zasadę w rozszerzeniu AddCors w ramach metody ConfigureServices, a następnie ustawić CorsAuthorizationFilterFactory
na 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");
}
Tę zasadę CORS można zastąpić na podstawie kontrolera lub akcji, ale może to ustawić wartość domyślną dla całej aplikacji.