ASP.NET Core MVC集成Azure AD B2C登出无限循环问题求助
解决Azure AD B2C登出无限循环问题
问题核心诱因
你遇到的登出循环问题,本质是Azure AD B2C注销回调与应用本地处理逻辑不匹配,导致登出请求被反复触发,常见原因包括:
- B2C应用注册的注销URL配置错误
- 应用内回调路径的处理逻辑未终止请求
- 本地用户会话未被正确清除
具体解决方案
1. 修正Azure AD B2C应用注册的注销URL
登录Azure门户进入你的B2C租户,找到对应应用注册:
- 进入身份验证页面,在注销URL区域添加完整回调地址,例如开发环境用
https://localhost:5001/signout/B2C_1_SUSI,生产环境替换为实际域名+路径。 - 确保该URL与
appsettings.json中SignedOutCallbackPath的配置完全一致(包含策略IDB2C_1_SUSI)。
2. 完善登出回调事件的处理逻辑
在Configure<OpenIdConnectOptions>的OnSignedOutCallbackRedirect事件中,添加会话清除和重定向逻辑,终止循环:
options.Events.OnSignedOutCallbackRedirect = async context => { Console.WriteLine("OnSignedOutCallbackRedirect"); // 清除本地用户会话 context.HttpContext.Session.Clear(); // 重定向到首页或指定页面,避免重复触发登出流程 context.Response.Redirect("/"); // 终止请求处理,阻止后续中间件执行 context.HandleResponse(); };
3. 确认中间件与路由配置有效性
检查项目配置是否符合要求:
UseAuthentication()和UseAuthorization()必须在UseRouting()之后、UseEndpoints()之前。endpoints.MapRazorPages()已正确配置,保证Microsoft Identity UI的登出相关页面能正常访问。
4. 验证B2C用户流的注销设置
进入B2C租户的用户流,打开B2C_1_SUSI策略:
- 检查注销设置,确认已启用"注销后重定向",并指定与应用一致的回调URL。
额外注意事项
- 测试时必须使用HTTPS(即使开发环境),B2C要求回调URL必须为HTTPS协议。
- 登出请求请通过
/MicrosoftIdentity/Account/SignOut触发,而非/MicrosoftIdentity/Account/SignedOut——后者是登出完成后的回调页面,直接访问会引发逻辑异常。
内容的提问来源于stack exchange,提问作者Emilian
相关产品推荐
相关产品推荐

