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

.NET 8 Blazor WASM登录Azure Entra后Query参数丢失问题求助

解决方案:.NET 8 Blazor WASM登录后保留Query参数

问题原因

.NET 8对Blazor WebAssembly的身份验证流程进行了调整,默认的MSAL登录跳转逻辑未正确保留原始请求的Query参数,导致登录成功后仅跳转至根路径。

具体解决步骤

1. 自定义登录跳转逻辑,携带完整URL

在Program.cs中修改MSAL配置,添加OnRedirectToLogin事件回调,手动保存包含Query参数的完整URL:

builder.Services.AddMsalAuthentication(options =>
{
    builder.Configuration.Bind("AzureAd", options.ProviderOptions.Authentication);
    options.ProviderOptions.DefaultAccessTokenScopes
        .Add(builder.Configuration.GetValue<string>("DownstreamApi:Scopes"));
    options.ProviderOptions.LoginMode = "redirect";

    // 拦截登录跳转,传递完整原始URL作为returnUrl
    options.Events.OnRedirectToLogin = context =>
    {
        var fullOriginalUrl = context.NavigationManager.Uri;
        // 对URL进行编码,避免Query参数丢失
        context.RedirectUri = $"authentication/login?returnUrl={Uri.EscapeDataString(fullOriginalUrl)}";
        return Task.CompletedTask;
    };
});

2. 修改Authentication组件,登录成功后跳转至原始URL

找到项目中的Authentication.razor组件(通常在Pages目录下),添加登录成功后的导航处理逻辑:

@page "/authentication/{action}"
@using Microsoft.AspNetCore.Components.WebAssembly.Authentication
@using Microsoft.AspNetCore.WebUtilities

<RemoteAuthenticatorView Action="@Action" OnLogInSucceeded="HandleLoginSuccess" />

@code {
    [Parameter] public string Action { get; set; }
    [Inject] public NavigationManager NavigationManager { get; set; }

    private void HandleLoginSuccess()
    {
        var currentUri = new Uri(NavigationManager.Uri);
        var queryParams = QueryHelpers.ParseQuery(currentUri.Query);
        
        // 解析保存的returnUrl参数
        if (queryParams.TryGetValue("returnUrl", out var returnUrl) && !string.IsNullOrWhiteSpace(returnUrl))
        {
            NavigationManager.NavigateTo(Uri.UnescapeDataString(returnUrl), forceLoad: true);
            return;
        }

        // 无returnUrl时跳转至默认首页
        NavigationManager.NavigateTo("/", forceLoad: true);
    }
}

3. 验证Azure Entra应用注册配置

确保Azure Entra应用注册的**回复URL(重定向URI)**包含你的应用域名(例如https://example.com/authentication/login-callback),并且未限制Query参数的传递。

验证效果

完成上述配置后,用户点击带Query参数的链接时:

  1. 会被重定向至Azure Entra登录页,同时完整URL被编码为returnUrl参数
  2. 登录成功后,系统会解析returnUrl并跳转至原始带参数的URL,正常展示指定客户资料

内容的提问来源于stack exchange,提问作者VSuser

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 06:07:35