asp.net-core
Demandes d'origine croisée (CORS)
Recherche…
Remarques
La sécurité du navigateur empêche une page Web de faire des requêtes AJAX vers un autre domaine. Cette restriction s'appelle la politique de même origine et empêche un site malveillant de lire des données sensibles d'un autre site. Cependant, il peut arriver que vous souhaitiez laisser d’autres sites créer des requêtes d’origine croisée vers votre application Web.
Cross Origin Resource Sharing (CORS) est un standard W3C qui permet à un serveur d'assouplir la politique de même origine. En utilisant CORS, un serveur peut autoriser explicitement certaines requêtes d’origine croisée tout en en rejetant d’autres. CORS est plus sûr et plus flexible que les techniques antérieures telles que JSONP.
Activer CORS pour toutes les demandes
Utilisez la méthode d'extension UseCors()
sur IApplicationBuilder
dans la méthode Configure
pour appliquer la stratégie CORS à toutes les demandes.
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();
}
Activer la stratégie CORS pour des contrôleurs spécifiques
Pour activer une stratégie CORS pour des contrôleurs spécifiques, vous devez créer la stratégie dans l'extension AddCors
dans la méthode ConfigureServices
:
services.AddCors(cors => cors.AddPolicy("AllowAll", policy =>
{
policy.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader();
}));
Cela vous permet d'appliquer la stratégie à un contrôleur:
[EnableCors("AllowAll")]
public class HomeController : Controller
{
// ...
}
Des politiques CORS plus sophistiquées
Le générateur de règles vous permet de créer des stratégies sophistiquées.
app.UseCors(builder =>
{
builder.WithOrigins("http://localhost:5000", "http://myproductionapp.com")
.WithMethods("GET", "POST", "HEAD")
.WithHeaders("accept", "content-type", "origin")
.SetPreflightMaxAge(TimeSpan.FromDays(7));
});
Cette stratégie n'autorise que les origines http://localhost:5000
et http://myproductionapp.com
avec uniquement les méthodes GET
, POST
et HEAD
et accepte uniquement les content-type
têtes HTTP accept
, content-type
et origin
. La méthode SetPreflightMaxAge
oblige les navigateurs à mettre en cache le résultat de la demande de contrôle en amont ( OPTIONS
) à mettre en cache pour la durée spécifiée.
Activer la stratégie CORS pour tous les contrôleurs
Pour activer une stratégie CORS sur tous vos contrôleurs MVC, vous devez créer la stratégie dans l'extension AddCors dans la méthode ConfigureServices, puis définir la stratégie sur 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");
}
Cette stratégie CORS peut être remplacée sur une base de contrôleur ou d'action, mais cela peut définir la valeur par défaut pour toute l'application.