9.8.3 Habilitando CORS

Los navegadores mas comunes como Firefox, Chrome, Internet Explorer cuentan con una característica llamada CORS (Cross-Origin Resource Sharing o Intercambio de Recursos de Origen Cruzado) el es un éstandar del W3C el cual es un consorcio internacional que genera recomendaciones y estándares para el desarrollo web.

Este éstandar indica que no debes permitir que accedan a tus servicios REST o contenido web desde un dominio o subdominio diferente a donde estan los servicios.

Por ejemplo si tu aplicación web desarrollada en angular, react, vue, etc se encuentra en la siguiente url www.caduca.com, y tus servicios los tienes en un subdominio, por ejemplo medicina.caduca.com, tus servicios solo estarán disponibles para las páginas que se encuentren en medicinas.caduca.com, la mayoría de las navegadores cumplen con este comportamiento, esto previene que un hacker con otro dominio por ejemplo www.hackers.com no podrían acceder a los servicios de medicinas.caduca.com

Cuando por alguna razón necesitas que tus servicios esten disponibles a otros subdominios los puedes habilitar configurando en el servidor donde se encuentras tus servicios en el ejemplo medicina.caduca.com habilitando mediante CORS que urls vas a permitir.

Puedes ver la documentación de CORS aquí

La lista de dominios personalizados la puedes agregar a tu archivo appsettings.json para que si deseas agregar nuevas urls no tengas que generar una versión de una dll nueva, si no solamente cambiar este archivo y reiniciar el servicio, en el último renglón AllowedHost puedes agregar tus dominios y subdominios separados por coma

appsettings.json
{
"ConnectionStrings": {
},
"Tokens": {
"Key": "4eQXP7GTCTRwC6x6",
"Issuer": "http://localhost:5000",
"Audience": "http://localhost:5000"
},
"Logging": {
"LogLevel": {
"Default": "Warning"
}
},
"AllowedHosts": "http://www.tudominio.com"
}

En .Net Core puedes agregar la lista de dominios permitidos en tu archivo Startup.cs, en el método ConfigureServices, puedes agregar el código antes de agregar el código para incializar Swagger y también en el método Configure, con el código Configuration.GetSection obtienes el contenido de una sección de tu archivo appsettings y con el método values obtienes el valor, como la función para habilitar los cors necesita un arreglo, simplemente separamos la variable por ,

Startup.cs
public void ConfigureServices(IServiceCollection services)
{
//Demás código
services.AddCors();
//Se agrega en generador de Swagger
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
var urlAceptadas = Configuration
.GetSection("AllowedHosts").Value.Split(",");
app.UseCors(builder => builder.WithOrigins(urlAceptadas)
.AllowAnyHeader()
.AllowAnyMethod()
);
}