asp.net-core
Cross-Origin Requests (CORS)
Zoeken…
Opmerkingen
Browserbeveiliging voorkomt dat een webpagina AJAX-aanvragen doet naar een ander domein. Deze beperking wordt het beleid van dezelfde oorsprong genoemd en voorkomt dat een kwaadwillende site gevoelige gegevens van een andere site leest. Soms wilt u echter andere sites verzoeken van oorsprong laten maken naar uw web-app.
Cross Origin Resource Sharing (CORS) is een W3C-standaard waarmee een server het beleid van dezelfde oorsprong kan versoepelen. Met behulp van CORS kan een server sommige aanvragen van oorsprong toestaan, terwijl andere wordt afgewezen. CORS is veiliger en flexibeler dan eerdere technieken zoals JSONP.
Schakel CORS in voor alle verzoeken
Gebruik de uitbreidingsmethode UseCors()
op de IApplicationBuilder
in de methode Configure
om het CORS-beleid op alle aanvragen toe te passen.
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();
}
Schakel CORS-beleid in voor specifieke controllers
Om een bepaald CORS-beleid voor specifieke controllers in te schakelen, moet u het beleid bouwen in de AddCors
extensie binnen de methode ConfigureServices
:
services.AddCors(cors => cors.AddPolicy("AllowAll", policy =>
{
policy.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader();
}));
Hiermee kunt u het beleid toepassen op een controller:
[EnableCors("AllowAll")]
public class HomeController : Controller
{
// ...
}
Meer geavanceerd CORS-beleid
Met de beleidsbouwer kunt u een geavanceerd beleid opstellen.
app.UseCors(builder =>
{
builder.WithOrigins("http://localhost:5000", "http://myproductionapp.com")
.WithMethods("GET", "POST", "HEAD")
.WithHeaders("accept", "content-type", "origin")
.SetPreflightMaxAge(TimeSpan.FromDays(7));
});
Dit beleid staat alleen de oorsprong http://localhost:5000
en http://myproductionapp.com
met alleen de methoden GET
, POST
en HEAD
en accepteert alleen de HTTP-headers accept
, content-type
en origin
. De methode SetPreflightMaxAge
zorgt ervoor dat de browsers het resultaat van het preflight-verzoek ( OPTIONS
) in de cache opslaan gedurende de opgegeven tijd.
Schakel CORS-beleid in voor alle controllers
Om een CORS-beleid voor al uw MVC-controllers in te schakelen, moet u het beleid bouwen in de AddCors-extensie binnen de ConfigureServices-methode en vervolgens het beleid instellen op de 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");
}
Dit CORS-beleid kan op controller- of actiebasis worden overschreven, maar dit kan de standaardinstelling voor de hele toepassing zijn.