You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 21:06:21