C# ASP.NET CORE 3.1:Azure AD身份验证在边缘中失败。身份验证期间无限重定向循环和页面重新加载

C# ASP.NET CORE 3.1:Azure AD身份验证在边缘中失败。身份验证期间无限重定向循环和页面重新加载,c#,.net,azure,asp.net-core,asp.net-core-3.1,C#,.net,Azure,Asp.net Core,Asp.net Core 3.1,我对chrome没有任何问题。这是边缘浏览器,我面临的问题。我已尝试清除缓存。已删除cookies。重置浏览器。什么都没用。我在登录时不断得到无限循环。它最终失败,并显示消息“我们无法让您登录。请重试。”。感谢您的帮助 public void ConfigureServices(IServiceCollection services) { services.AddCors(options => {

我对chrome没有任何问题。这是边缘浏览器,我面临的问题。我已尝试清除缓存。已删除cookies。重置浏览器。什么都没用。我在登录时不断得到无限循环。它最终失败,并显示消息“我们无法让您登录。请重试。”。感谢您的帮助

public void ConfigureServices(IServiceCollection services)
        {
            services.AddCors(options =>
            {
                options.AddPolicy("CorsPolicy",
                    builder => builder.AllowAnyOrigin()
                    .AllowAnyMethod()
                    .AllowAnyHeader());
            });

            services.Configure<OpenIdConnectOptions>(OpenIdConnectDefaults.AuthenticationScheme, options =>
            {
                options.Events.OnRedirectToIdentityProviderForSignOut = async context =>
                {
                    Console.WriteLine("intercepted");
                };
            });

            var azureAd = new AzureAd();
            Configuration.GetSection("AzureAd").Bind(azureAd);
            services.AddControllersWithViews();

            services.AddAuthentication(AzureADDefaults.AuthenticationScheme)
                .AddAzureAD(options => Configuration.Bind("AzureAd", options));

             var url = "https://abc.xyz.com/platform/signin-oidc";
            //var url = "https://localhost:5001/platform/signin-oidc";

            services.Configure<OpenIdConnectOptions>(AzureADDefaults.OpenIdScheme, options =>
            {
                options.SaveTokens = true;


                options.Events = new OpenIdConnectEvents
                {

                    OnRedirectToIdentityProvider = async context =>
                    {
                        context.ProtocolMessage.RedirectUri = url;

                        //context.Response.Headers.Add("Referrer-Policy", "no-referrer");
                        await Task.FromResult(0);
                    }
                };
            });

        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {

            app.UseCors("CorsPolicy");

            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseExceptionHandler("/Home/Error");
                // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
                app.UseHsts();
            }

            app.UseHttpsRedirection();
            app.UseStaticFiles();
            //app.UseCookiePolicy();
            app.UseRouting();
            app.UseAuthentication();
            app.UseAuthorization();
            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllerRoute(
                                   name: "default",
                                   pattern: "{controller=Home}/{action=Index}/{id?}");
                endpoints.MapControllerRoute(
                    name: "platform",
                    pattern: "/platform/{controller=Home}/{action=Index}/{id?}");


            });
        }
public void配置服务(IServiceCollection服务)
{
services.AddCors(选项=>
{
options.AddPolicy(“CorsPolicy”,
builder=>builder.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader());
});
配置(OpenIdConnectDefaults.AuthenticationScheme,选项=>
{
options.Events.OnRedirectToIdentityProviderForSignOut=异步上下文=>
{
控制台写入线(“截获”);
};
});
var azureAd=新azureAd();
Configuration.GetSection(“AzureAd”).Bind(AzureAd);
services.AddControllersWithViews();
services.AddAuthentication(AzureADDefaults.AuthenticationScheme)
.AddAzureAD(options=>Configuration.Bind(“AzureAd”,options));
变量url=”https://abc.xyz.com/platform/signin-oidc";
//变量url=”https://localhost:5001/platform/signin-oidc”;
配置(AzureADDefaults.OpenIdScheme,选项=>
{
options.SaveTokens=true;
options.Events=新的OpenIdConnectEvents
{
OnRedirectToIdentityProvider=异步上下文=>
{
context.ProtocolMessage.RedirectUri=url;
//context.Response.Headers.Add(“推荐人策略”、“无推荐人”);
等待任务。从结果(0);
}
};
});
}
//此方法由运行时调用。使用此方法配置HTTP请求管道。
public void配置(IApplicationBuilder应用程序、IWebHostEnvironment环境)
{
附录UseCors(“公司政策”);
if(env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
其他的
{
app.UseExceptionHandler(“/Home/Error”);
//默认的HSTS值为30天。您可能希望在生产场景中更改此值,请参阅https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
//app.UseCookiePolicy();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(端点=>
{
endpoints.MapControllerRoute(
名称:“默认”,
模式:“{controller=Home}/{action=Index}/{id?}”);
endpoints.MapControllerRoute(
名称:“平台”,
模式:“/platform/{controller=Home}/{action=Index}/{id?}”);
});
}
编辑

我确实在开发人员工具的“网络”选项卡中看到了这一点:


问题是因为广告发送回的令牌存储在cookie中。cookie被阻止,因为它没有安全属性

它没有安全属性,因为应用程序部署在Kubernetes集群上,前门和应用程序之间的通信是http而不是https。 因此,为了强制执行安全cookie,我必须在
public void Configure(iaapplicationbuilder应用程序,IWebHostEnvironment env)中添加以下内容


我不是100%确定,但我认为这与SameSite cookie策略有关:如果使用上述方法无效,则进行网络跟踪(wireshark/fiddler/等),并跟踪cookie以确保将其传递给MS.@ThiagoCustodio尝试过。它不起作用。它仅在本地部署后发生。。我不知道;“我不会有任何问题的。”我希望我知道怎么做。
        app.UseForwardedHeaders(new ForwardedHeadersOptions
        {
            ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
        });

        app.Use(async (context, next) =>
        {
            if (context.Request.Host.Host.ToLower() != "localhost")
                context.Request.Scheme = "https";
            await next.Invoke();
        });