在 .NET Core 3.1 中添加窗口身份验证后出现 Cors 错误

Posted

技术标签:

【中文标题】在 .NET Core 3.1 中添加窗口身份验证后出现 Cors 错误【英文标题】:Cors Error After adding window authentication in .NET Core 3.1 【发布时间】:2021-07-17 09:52:29 【问题描述】:

Wep API 工作正常,但添加身份验证中间件后开始抛出 CORS 错误,下面是 startup.cs 代码

在谷歌上到处找,但似乎没有任何效果,请给我正确的方向。

    public class Startup
    
        readonly string MyAllowedSpecificOrigins = "_myAllowedSpecificOrigins";
        public Startup(IConfiguration configuration)
        
            Configuration = configuration;
        

        public IConfiguration Configuration  get; 


        public void ConfigureServices(IServiceCollection services)
        
            services.AddCors(options =>
            
                options.AddPolicy(name: MyAllowedSpecificOrigins,
                                  builder =>
                                  
                                      builder
                                      .AllowAnyOrigin()
                                      .AllowAnyHeader()
                                      .AllowAnyMethod();
                                  );
            );
            services.AddTransient<IJobRepository, JobRepository>();
            services.AddSingleton<IConfiguration>(Configuration);
            services.AddControllers();
            services.AddAuthentication(NegotiateDefaults.AuthenticationScheme).AddNegotiate();
        


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

            ///app.UseHttpsRedirection();
            app.UseRouting();
            app.UseCors(MyAllowedSpecificOrigins);
            app.UseAuthentication();
            app.UseAuthorization();

            app.UseEndpoints(endpoints =>
            
                endpoints.MapControllers();
            );
        
    

【问题讨论】:

我建议您可以先添加 .AllowCredentials() 并确保客户端将 XMLHttpRequest.withCredentials 设置为 true 。详情可以参考这个article。 非常感谢!!修好了!! 我很高兴这个解决方案解决了您的问题。我会写一个回复。请将其标记为答案,以便其他面临相同问题的人更容易找到答案。谢谢。 当我在我的帖子请求中包含凭证包含的标头时,我得到了相同的 cors 错误。就像下面的标头:“Content-Type”:“application/json”, , 凭据: 'include', 【参考方案1】:

根据您的描述,我建议您可以先添加.AllowCredentials(),并确保客户端将 XMLHttpRequest.withCredentials 设置为 true。

凭据需要在 CORS 请求中进行特殊处理。默认情况下,浏览器不会通过跨域请求发送凭据。凭据包括 cookie 和 HTTP 身份验证方案。要使用跨域请求发送凭据,客户端必须将 XMLHttpRequest.withCredentials 设置为 true。

更多细节,你可以参考这个article。

【讨论】:

以上是关于在 .NET Core 3.1 中添加窗口身份验证后出现 Cors 错误的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ASP.NET Core 3.1 中启用多重身份验证?

Asp.net core 3.1 保护 API 和 Web 应用程序

.Net Core 3.1 合并 JWT 和 OpenIDConnect 身份验证

ASP.NET Core 3.1 中的证书身份验证实现

在 asp.net core 3.1+ 中使用多个中间件进行身份验证和授权

Azure AD 在 .NET Core 3.1 中未进行身份验证