9.8.3 Habilitando CORS

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

Este estándar indica que no debes permitir que accedan a tus servicios REST o contenido web desde un dominio o subdominio diferente a donde están 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 servicios.caduca.com, tus servicios solo estarán disponibles para las páginas que se encuentren en servicios.caduca.com. La mayoría de las navegadores cumplen con este requerimiento de seguridad.Esto busca prevenir que un hacker con otro dominio por ejemplo www.hackers.com no tengan acceso a los servicios de servicios.caduca.com

Cuando necesitas que tus servicios estén disponibles a otros subdominios los puedes habilitar configurando en el servidor donde se encuentran tus servicios en el ejemplo servicios.caduca.com las urls vas a permitir (CORS)

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"
    }
  },
  "AllowedOrigins": "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 inicializar 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 debe estar antes de app.UseRouting, app.useMVc
     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()
                           );
 }

Last updated