C# Azure广告在登录后陷入循环
我正在尝试集成Azure广告,以验证对ASP.NET核心开发并托管在Azure上的Web应用程序的访问 我已将TenantId、ClientId和域添加到我的appsettings.json中。 我还在启动中配置了中间件,如下所示: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
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是不可能的。很高兴听到你把它整理好了。