asp.net-core
Solicitudes de Origen Cruzado (CORS)
Buscar..
Observaciones
La seguridad del navegador impide que una página web realice solicitudes AJAX a otro dominio. Esta restricción se denomina política del mismo origen e impide que un sitio malintencionado lea datos confidenciales de otro sitio. Sin embargo, a veces es posible que desee permitir que otros sitios realicen solicitudes de origen cruzado a su aplicación web.
El intercambio de recursos de origen cruzado (CORS) es un estándar de W3C que permite a un servidor relajar la política del mismo origen. Usando CORS, un servidor puede permitir explícitamente algunas solicitudes de origen cruzado mientras rechaza otras. CORS es más seguro y más flexible que las técnicas anteriores, como JSONP.
Habilitar CORS para todas las solicitudes
Use el método de extensión UseCors()
en IApplicationBuilder
en el método Configure
para aplicar la política CORS a todas las solicitudes.
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();
}
Habilitar la política CORS para controladores específicos
Para habilitar una determinada política de CORS para controladores específicos, debe crear la política en la extensión AddCors
dentro del método ConfigureServices
:
services.AddCors(cors => cors.AddPolicy("AllowAll", policy =>
{
policy.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader();
}));
Esto le permite aplicar la política a un controlador:
[EnableCors("AllowAll")]
public class HomeController : Controller
{
// ...
}
Políticas de CORS más sofisticadas
El generador de políticas le permite crear políticas sofisticadas.
app.UseCors(builder =>
{
builder.WithOrigins("http://localhost:5000", "http://myproductionapp.com")
.WithMethods("GET", "POST", "HEAD")
.WithHeaders("accept", "content-type", "origin")
.SetPreflightMaxAge(TimeSpan.FromDays(7));
});
Esta política solo permite los orígenes http://localhost:5000
y http://myproductionapp.com
con solo los métodos GET
, POST
y HEAD
y solo acepta los encabezados HTTP de accept
, content-type
y origin
. El método SetPreflightMaxAge
hace que los navegadores SetPreflightMaxAge
en caché el resultado de la solicitud de verificación previa ( OPTIONS
) para que se almacene en caché durante el tiempo especificado.
Habilitar la política CORS para todos los controladores
Para habilitar una política CORS en todos sus controladores MVC, debe crear la política en la extensión AddCors dentro del método ConfigureServices y luego configurar la política en 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");
}
Esta política de CORS se puede sobrescribir en un controlador o acción, pero esto puede establecer el valor predeterminado para toda la aplicación.