预检访问控制允许凭据

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 - 无法发送重定向,对预检请求的响应未通过访问控制检查

ASP.NET Core Web API + Angular 对预检请求的响应未通过访问控制检查:预检请求不允许重定向

对预检请求的响应未通过访问控制检查错误

响应于预检要求不经过访问控制检查(JavaScript的)