C# Azure广告在登录后陷入循环

C# Azure广告在登录后陷入循环,c#,azure,asp.net-core,azure-active-directory,C#,Azure,Asp.net Core,Azure Active Directory,我正在尝试集成Azure广告,以验证对ASP.NET核心开发并托管在Azure上的Web应用程序的访问 我已将TenantId、ClientId和域添加到我的appsettings.json中。 我还在启动中配置了中间件,如下所示: services.AddAuthentication(sharedOptions => { sharedOptions.DefaultScheme = CookieAuthenticationDefaults.Authenticati

我正在尝试集成Azure广告,以验证对ASP.NET核心开发并托管在Azure上的Web应用程序的访问

我已将TenantId、ClientId和域添加到我的appsettings.json中。 我还在启动中配置了中间件,如下所示:

 services.AddAuthentication(sharedOptions => {
            sharedOptions.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
            sharedOptions.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
        })
            .AddAzureAd(options => Configuration.Bind("AzureAd", options))
            .AddCookie()
            .AddJwtBearer(cfg =>
            {
                cfg.TokenValidationParameters = new Microsoft.IdentityModel.Tokens.TokenValidationParameters()
                {
                    ValidIssuer = Configuration["Tokens:Issuer"],
                    ValidAudience = Configuration["Tokens:Audience"],
                    IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["Tokens:Key"])) 
                };
            });
整个Web应用程序都是HTTPS

目前的情况如下: 1) 转到网站主页

2) 访问需要授权的资源

3) 将显示Azure广告登录屏幕,并接受登录信息

4) 该页面变为白色,并在我的Web应用程序和MS登录站点之间的重定向循环中卡住

我在上的另一个问题中看到,用户的问题与通过HTTP和HTTPS发送cookie有关。然而,这里的情况似乎并非如此。我尝试按如下方式配置中间件(仅用于测试目的),但问题仍然存在:

 services.AddAuthentication(sharedOptions => {
            sharedOptions.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
            sharedOptions.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
        })
            .AddAzureAd(options => Configuration.Bind("AzureAd", options))
            .AddCookie(options => {
                options.Cookie.SecurePolicy = Microsoft.AspNetCore.Http.CookieSecurePolicy.None;
            })
            .AddJwtBearer(cfg =>
            {
                cfg.TokenValidationParameters = new Microsoft.IdentityModel.Tokens.TokenValidationParameters()
                {
                    ValidIssuer = Configuration["Tokens:Issuer"],
                    ValidAudience = Configuration["Tokens:Audience"],
                    IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["Tokens:Key"])) 
                };
            });

我最终解决了这个问题。我最初也使用cookies设置了自己的身份服务。从startup.cs中删除以下代码解决了此问题:

services.AddIdentity<ServiceUser, IdentityRole>(cfg => {
            cfg.User.RequireUniqueEmail = true;
        });
services.AddIdentity(cfg=>{
cfg.User.RequireUniqueEmail=true;
});

如果身份验证流正在循环,我猜测中间件正在拒绝或不满意它从AAD得到的响应。这里没有足够的答案,但您可以尝试在禁用“Just My code”(仅我的代码)的调试器下运行代码,以便捕获中间件中的异常。另外,尝试检查应用程序第二次302发送到AAD时发出的请求。另一个想法是:尝试禁用所有cookie选项,查看验证流是否工作。Cookie验证可能会拒绝从AAD重定向到您的应用程序。如果您发布控制器代码(特别是授权的配置方式),也会有所帮助。这篇文章可能也有帮助:为什么你要硬编码不记名令牌的签名密钥?您的idp不提供获取公钥的元数据端点吗?Azure广告提供了一个例子。@RyanS感谢您的建议。据我所知,在没有启用cookie auth的情况下使用AAD是不可能的。很高兴听到你把它整理好了。