L'implémentation du mécanisme CORS est essentielle pour permettre à une application cliente située sur un domaine distinct de consommer les ressources d'une interface de programmation Web API. Voici la démarche technique pour configurer cette fonctionnalité dans un environnement .NET Framework.
1. Installation des dépendances via NuGet
Pour commencer, il est nécessaire d'intégrer la bibliothèque officielle gérant le CORS. Dans la console du gestionnaire de packages ou via l'interface graphique NuGet, recherchez et installez le package suivant :
Install-Package Microsoft.AspNet.WebApi.Cors
Cette opération ajoute automatiquement les références aux bibliothèques System.Web.Cors.dll et System.Web.Http.Cors.dll au sein de votre projet, permettant ainsi d'accéder aux classes de configuration dédiées.
2. Activation globale dans la configuration de l'API
Une fois les packages installés, vous devez initialiser le support CORS dans le fichier App_Start/WebApiConfig.cs. Une approche simple consiste à autoriser toutes les requêtes, bien que cela soit déconseillé pour les environnements de production.
public static class WebApiConfig
{
public static void Register(HttpConfiguration settings)
{
// Autorisation permissive : toutes origines, toutes méthodes, tous en-têtes
var defaultPolicy = new EnableCorsAttribute("*", "*", "*");
settings.EnableCors(defaultPolicy);
// Configuration des routes standard
settings.MapHttpAttributeRoutes();
settings.Routes.MapHttpRoute(
name: "ServiceApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
Note technique : Les versions anciennes de navigateurs, telles qu'Internet Explorer 9 et versions antérieures, ne supportent pas nativement le protocole CORS standard.
3. Configuraton dynamique via le fichier Web.config
Pour une meilleure flexibilité et une sécurité accrue, il est préférable d'extraire les paramètres d'autorisation dans le fichier de configuration de l'application. Cela permet de modifier les domaines autorisés sans recompiler le code.
Ajoutez d'abord les clés dans le fichier Web.config :
<appSettings>
<add key="cors:origins" value="https://mon-domaine-client.com"/>
<add key="cors:headers" value="Content-Type,Accept"/>
<add key="cors:methods" value="GET,POST"/>
</appSettings>
Ensuite, adaptez la méthode d'enregistrement pour lire ces valeurs :
public static void Register(HttpConfiguration config)
{
var domains = ConfigurationManager.AppSettings["cors:origins"];
var headers = ConfigurationManager.AppSettings["cors:headers"];
var verbs = ConfigurationManager.AppSettings["cors:methods"];
var corsProvider = new EnableCorsAttribute(domains, headers, verbs)
{
SupportsCredentials = true
};
config.EnableCors(corsProvider);
}
4. Restriction granulaire au niveau des contrôleurs
Il arrive souvent qu'un besoin de sécurité spécifique impose des règles différentes selon la resssource accédée. Dans ce cas, l'attribut [EnableCors] peut être appliqué directement sur une classe de contrôleur ou sur une action spécifique.
[EnableCors(origins: "https://app-client.net", headers: "*", methods: "GET,PUT")]
public class StockController : ApiController
{
[HttpGet]
public IHttpActionResult GetInventory()
{
return Ok(new { Status = "Disponible", Count = 150 });
}
[HttpPost]
[DisableCors] // Désactive explicitement le CORS pour cette méthode
public IHttpActionResult UpdateInventory()
{
return Ok();
}
}
L'utilisation de l'attribut au niveau du contrôleur surcharge les paramètres globaux définis dans WebApiConfig, offrant ainsi un contrôle précis sur l'exposition de vos services.