ASP.NET Core MVC集成Azure AD B2C出现登录循环及关联失败问题
我正尝试在ASP.NET Core MVC应用中集成Azure AD B2C,初始可显示登录页面,但输入用户名密码点击登录后陷入循环;点击浏览器停止加载按钮后,首页显示“处理请求时出错(详情:关联失败)”。

Program.cs代码
using Microsoft.AspNetCore.Authentication; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authentication.OpenIdConnect; using Microsoft.Identity.Web; using Microsoft.Identity.Web.UI; var builder = WebApplication.CreateBuilder(args); // Add services to the container. builder.Services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme) .AddMicrosoftIdentityWebApp(builder.Configuration.GetSection("AzureAdB2C")); builder.Services.AddControllersWithViews(); builder.Services.AddRazorPages() .AddMicrosoftIdentityUI(); var app = builder.Build(); // Configure the HTTP request pipeline. if (!app.Environment.IsDevelopment()) { 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.UseRouting(); app.UseAuthorization(); app.UseAuthentication(); app.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); app.MapRazorPages(); app.Run();
控制台重复输出日志(已翻译)
Microsoft.IdentityModel.LoggingExtensions.IdentityLoggerAdapter: 信息: IDX10245: 从验证后的令牌创建声明身份: '[类型为'Microsoft.IdentityModel.JsonWebTokens.JsonWebToken'的PII已隐藏。]'。
Microsoft.IdentityModel.LoggingExtensions.IdentityLoggerAdapter: 信息: IDX21305: OpenIdConnectProtocolValidationContext.ProtocolMessage.Code为空,OpenIdConnect响应中没有可验证的'code'。
Microsoft.IdentityModel.LoggingExtensions.IdentityLoggerAdapter: 信息: IDX21310: OpenIdConnectProtocolValidationContext.ProtocolMessage.AccessToken为空,OpenIdConnect响应中没有可验证的'token'。
解决方案
修正中间件顺序:身份验证中间件必须在授权中间件之前执行,否则未验证用户会被提前拦截,引发登录循环。调整代码如下:
app.UseAuthentication(); app.UseAuthorization();验证Azure AD B2C配置:确认
appsettings.json中的AzureAdB2C配置项与Azure门户信息完全匹配:Instance、Domain、ClientId需对应应用注册的实际值SignUpSignInPolicyId正确设置为你的用户流ID- 重定向URI(回调地址)必须与应用注册中配置的一致,且必须使用HTTPS协议
启用详细日志排查:添加代码显示完整PII信息,定位具体错误细节:
// 在builder.Build()之前添加 builder.Services.AddLogging(logging => { logging.AddConsole(); logging.SetMinimumLevel(LogLevel.Debug); }); Microsoft.IdentityModel.Logging.IdentityModelEventSource.ShowPII = true;确认Razor Pages映射:确保
MapRazorPages()在路由配置后正确添加,Microsoft Identity UI依赖Razor Pages处理登录回调、注销等流程,避免路由冲突。
内容的提问来源于stack exchange,提问作者Midlaj

