预检访问控制允许凭据
Posted
技术标签:
【中文标题】预检访问控制允许凭据【英文标题】:Preflight Access-Control-Allow-Credentials 【发布时间】:2019-03-22 12:50:37 【问题描述】:我的 ASP.NET Core Web 应用程序部署为 Azure 应用程序服务时遇到了 CORS 问题。前端部署为不同的应用服务。当我尝试从前端访问 Api 时,出现以下错误。
加载失败 https://chatclassifier.azurewebsites.net/chatcontroller/getchatData: 对预检请求的响应未通过访问控制检查: 响应中“Access-Control-Allow-Credentials”标头的值 当请求的凭证模式为 '' 时必须为 'true' '包括'。起源 'https://chatclassifierangularfrontend20180924084838.azurewebsites.net' 因此不允许访问。请求的凭证模式 由 XMLHttpRequest 发起由 withCredentials 控制 属性。
我正在使用一些 cookie 在客户端和服务器之间传递数据。
我在 ASP.NET Core 中设置了更多的 CORS 策略,如下在 Setup.cs 中
配置服务:
public void ConfigureServices(IServiceCollection services)
services.AddCors(options =>
options.AddPolicy("AllowAllHeaders",
builder =>
builder
.WithOrigins("https://XXXXXXXXXXangularfrontend20180924084838.azurewebsites.net")
.AllowAnyMethod()
.AllowAnyHeader()
.AllowCredentials();
);
);
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
services.Configure<FormOptions>(x =>
x.ValueLengthLimit = int.MaxValue;
x.MultipartBodyLengthLimit = int.MaxValue;
);
配置:
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
var cookiePolicyOptions = new CookiePolicyOptions
Secure = CookieSecurePolicy.SameAsRequest,
MinimumSameSitePolicy = SameSiteMode.None
;
if (env.IsDevelopment())
app.UseDeveloperExceptionPage();
else
app.UseCors("AllowAllHeaders");
app.UseCookiePolicy(cookiePolicyOptions);
app.UseHttpsRedirection();
app.UseMiddleware(typeof(ApiExceptionHandling));
app.UseMvc();
我没有在我的 API 代码中的其他任何地方添加任何其他与 CORS 相关的代码。我尝试将 CORS“AllowAllHeaders”属性添加到我的控制器,但这也不起作用。
此外,我还在 Azure 中 CORS 下的 Web 应用配置中添加了以下代码行。
显然,我已将 URL 名称更改为包含 XXXXXX,并确保它们在我的 Azure 门户和 Web 应用代码中相同。
任何帮助将不胜感激!
【问题讨论】:
不应将 Azure 应用服务 CORS 配置与代码中的配置结合使用。如果你在应用服务上启用了 CORS,那么你的 CORS 配置在代码中基本上会被忽略。 @juunas 我希望您已将其作为答案提交,这样我就可以投票给您。从 Azure 界面看,你不应该在这两个地方配置 CORS。 完成,我添加了答案???? 【参考方案1】:不应将 Azure 应用服务 CORS 配置与代码中的配置结合使用。如果你在应用服务上开启了 CORS,你的 CORS 配置在代码中基本会被忽略。
这是由于应用服务拦截了 OPTIONS 请求。
【讨论】:
谢谢!我无法弄清楚为什么我在代码中的所有设置都被忽略了。以上是关于预检访问控制允许凭据的主要内容,如果未能解决你的问题,请参考以下文章
CORS:对预检请求的响应未通过访问控制检查:预检请求不允许重定向
Sphere Engine 问题 API - 错误:对预检请求的响应未通过访问控制检查:不存在访问控制允许来源
Express - 无法发送重定向,对预检请求的响应未通过访问控制检查