使用Entra租户MSAL 2登录正常,登出时出现404错误求助
问题分析与解决办法
问题原因
- MVC路由未映射:你使用的
MicrosoftIdentity/Account/SignOut是MVC控制器路由,但当前应用仅配置了Razor组件端点,未添加MVC路由映射,导致登出请求无法匹配到对应的控制器,返回404。 - 相对路径解析错误:登出链接使用相对路径
MicrosoftIdentity/Account/SignOut,在不同路由层级下可能被错误解析,无法指向正确的登出端点。 - 缺失登出重定向配置:Entra Customer租户登出流程需要明确的重定向地址,未配置会导致流程不完整,甚至间接引发路由问题。
解决步骤
1. 添加MVC路由映射
在应用端点配置中,新增MVC控制器路由映射,确保Account控制器的登出路由能被识别:
var app = builder.Build(); // 其他中间件配置... app.UseAuthentication(); app.UseAuthorization(); app.MapRazorComponents<App>() .AddInteractiveServerRenderMode() .AddInteractiveWebAssemblyRenderMode() .AddAdditionalAssemblies(typeof(MyClientApp._Imports).Assembly); // 添加MVC路由映射 app.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); app.Run();
2. 修正登出链接路径
将相对路径改为绝对路径,避免路由层级导致的解析错误:
<a href="/MicrosoftIdentity/Account/SignOut" class="ti-dropdown-item"> <i class="ti ti-logout text-lg"></i> Sign Out </a>
3. 配置登出重定向地址
在AzureAd配置中添加PostLogoutRedirectUri,指定登出完成后的跳转页面:
"AzureAd": { "Authority": "https://55...67.ciamlogin.com/55...67/v2.0", "Instance": "https://55...67.ciamlogin.com/55...67/v2.0", "Domain": "exampleTenant.onmicrosoft.com", "ClientId": "44...56", "ClientSecret": "{{omitted}}", "ClientCapabilities": [ "cp1" ], "CallbackPath": "/signin-oidc", "PostLogoutRedirectUri": "/" }
4. 确认中间件顺序
确保UseAuthentication()和UseAuthorization()在所有端点映射之前执行,当前配置已满足此要求,无需调整。
完成以上修改后重启应用,登出流程将正常触发:先跳转至Entra Customer租户的登出页面,完成后自动重定向到配置的地址,不再出现404错误。
内容的提问来源于stack exchange,提问作者Josh
相关产品推荐
相关产品推荐

