gpt4 book ai didi

c# - 配置 Strict Cors .Net Core 3.1

转载 作者:行者123 更新时间:2023-12-04 13:34:06 27 4
gpt4 key购买 nike

我有一个公共(public)分析 web api (.Net Core 3.1),它从我的各种 web 应用程序和站点(页面 View 等)中捕获基本分析。我非常想以更严格的方式配置 cors,因为我很清楚流量应该来自哪里。值得注意的是,我正在从 .Net Core 2.2 更新此应用程序至 .Net Core 3.1 .
我的 Startup.cs 中有以下方法文件

public void ConfigureServices(IServiceCollection services)
{
...
ConfigureCors(services);
}

private void ConfigureCors(IServiceCollection services)
{
// https://weblog.west-wind.com/posts/2016/Sep/26/ASPNET-Core-and-CORS-Gotchas
services.AddCors(options =>
{
options.AddPolicy("CorsPolicy",
builder => builder.WithOrigins(AppConfiguration.CorsOrigins)
.AllowAnyMethod()
.AllowAnyHeader());
});
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}

app.UseRouting();
app.UseCors("CorsPolicy");
app.UseAuthentication();
app.UseAuthorization();

app.UseEndpoints(endpoints =>
{
endpoints.MapControllers().RequireAuthorization();
});
}
AppConfiguration是我用来处理配置的类,它抓取 json使用以下值: public string[] CorsOrigins => _config["CorsOrigins"].Split(',');appsettings.Development.json , 我有 "CorsOrigins": "*"我非常想在 appsettings.Production.json 中指定严格的起源和 appsettings.Staging.json文件。
例如。 "CorsOrigins": "https://subdomain.example.com,https://www.example.com,https://example.com" ,但在部署时,我的状态为 502每当网站/应用程序访问各个端点时。 "CorsOrigins": "*"可在本地运行,因此 Startup.cs 不会有任何问题据我所知,文件。
更新: "CorsOrigins": "*"实际上也不适用于登台或生产环境。现在我更糊涂了。需要明确的是,这是一个 cors题。在升级到 .Net Core 3.1 之前,以下工作正常:
private void ConfigureCors(IServiceCollection services)
services.AddCors(options =>
{
options.AddPolicy("CorsPolicy",
builder => builder.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader()
.AllowCredentials());
});
}
enter image description here

最佳答案

注意将 UseCors 放置在正确的位置。来自 the docs :

The call to UseCors must be placed after UseRouting, but beforeUseAuthorization.


如评论中所述,AllowCredentials 不允许允许“*”作为原点。
这是我的 ASPNET Core 3.1 项目中 CORS 配置的一个工作示例。它在 Configure 方法而不是 ConfigureServices 中进行配置,但内容相同:
// Startup.cs

public void ConfigureServices(IServiceCollection services)
{
services.AddCors();
// etc
}

public void Configure(IApplicationBuilder app)
{
// other configs

app.UseRouting();

// CORS configuration. Expects allowed origins as comma-separated list in config under 'Cors:AllowedOrigins'.
string configuredOrigins = Configuration["Cors:AllowedOrigins"] ?? throw new ArgumentNullException("Cors:AllowedOrigins");
string[] origins = configuredOrigins.Split(',', ';').Select(i => i.Trim()).ToArray();
app.UseCors(policy => policy
.WithOrigins(origins)
.AllowAnyMethod()
.AllowAnyHeader()
.AllowCredentials() // Required by SignalR
.WithExposedHeaders(CONTINUATION_HEADER_KEY) // Allow use of custom header
.SetPreflightMaxAge(TimeSpan.FromSeconds(86400))); // Allow caching for 24 hours (depends on browser)

app.UseAuthentication();
app.UseAuthorization();

// other configs
}

关于c# - 配置 Strict Cors .Net Core 3.1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63253272/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com