> For the complete documentation index, see [llms.txt](https://abi.gitbook.io/net-core/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://abi.gitbook.io/net-core/7.-seguridad/7.8-mejorando-tu-codigo/7.8.3-configurando-cors.md).

# 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](http://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](http://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í

{% embed url="<https://developer.mozilla.org/es/docs/Web/HTTP/Access_control_CORS>" %}

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**

{% code title="appsettings.json" %}

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

{% endcode %}

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 ,&#x20;

{% code title="Startup.cs" %}

```csharp
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()
                           );
 }
```

{% endcode %}
