.NET 8升级后Blazor WebAssembly Azure AD认证深层链接失效
Blazor WebAssembly .NET 8 升级后深层链接登录重定向到根目录的解决方法
问题根源
.NET 8 对Blazor WebAssembly的认证流程做了安全调整:认证系统现在仅接受相对路径作为returnUrl参数,如果传递完整的绝对URL(包含域名、协议),会被判定为无效路径,最终重定向到应用根目录。这是.NET 8 针对认证安全性的优化,之前.NET 6允许传递完整URL的逻辑被修改。
解决步骤
1. 修改RedirectToLogin组件,传递相对路径
将原来传递完整Navigation.Uri的逻辑,改为提取相对于应用基路径的相对路径:
@inject NavigationManager Navigation @code { protected override void OnInitialized() { // 提取相对路径而非完整URL var relativeReturnUrl = Navigation.ToBaseRelativePath(Navigation.Uri); Navigation.NavigateTo($"authentication/login?returnUrl={Uri.EscapeDataString(relativeReturnUrl)}"); } }
2. 确认Program.cs中的认证配置
检查MSAL认证配置,确保重定向URI和回调路径正确配置:
builder.Services.AddMsalAuthentication(options => { builder.Configuration.Bind("AzureAd", options.ProviderOptions.Authentication); // 添加你的API权限范围 options.ProviderOptions.DefaultAccessTokenScopes.Add("api://your-client-id/access_scope"); // 确保回调路径与Azure Entra注册的一致,默认是/authentication/login-callback options.ProviderOptions.RedirectUri = "/authentication/login-callback"; options.ProviderOptions.PostLogoutRedirectUri = "/"; });
3. 验证Azure Entra ID应用注册的重定向URI
登录Azure门户,进入你的Entra ID应用注册,确认重定向URI列表中包含应用的登录回调路径:
- 本地开发:
https://localhost:<port>/authentication/login-callback - 生产环境:
https://your-app-domain/authentication/login-callback
额外说明
如果应用配置了自定义基路径(比如部署在子目录下),Navigation.ToBaseRelativePath会自动处理基路径,确保生成的相对路径正确。
内容的提问来源于stack exchange,提问作者Robert Pouleijn
相关产品推荐
相关产品推荐

