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

.NET 7升级后Blazor应用MSAL登录回调无法跳转至返回URI

解决.NET7 Blazor WebAssembly登录后重定向到根目录的问题

问题原因

.NET7对Blazor WebAssembly身份验证的returnUrl处理逻辑做了调整,不再支持传递绝对路径作为returnUrl,如果传入绝对路径会被系统忽略,默认跳转到根目录/。而.NET6允许使用绝对路径,这是升级后问题出现的核心原因。

解决方案

1. 修改登录重定向代码,传递相对路径

将原来传递绝对路径的代码,改为提取当前页面的相对路径作为returnUrl:

原代码:

NavigationManager.NavigateTo($"authentication/login?returnUrl={Uri.EscapeDataString(Navigation.Uri)}");

修改为:

// 提取相对于应用基路径的相对路径
var relativeReturnUrl = Navigation.ToBaseRelativePath(Navigation.Uri);
// 转义后传递
Navigation.NavigateTo($"authentication/login?returnUrl={Uri.EscapeDataString(relativeReturnUrl)}");

2. 验证登录回调页面的处理逻辑

确保/authentication/login-callback页面正确提取并使用returnUrl,示例代码如下:

@page "/authentication/login-callback"
@inject NavigationManager Navigation
@inject IAuthenticationService AuthenticationService

@code {
    protected override async Task OnInitializedAsync()
    {
        // 从查询字符串中提取returnUrl
        var returnUrl = Navigation.ExtractQueryString(Navigation.Uri, "returnUrl");
        // 为空则默认跳转到根目录
        returnUrl = string.IsNullOrEmpty(returnUrl) ? "/" : returnUrl;

        var authResult = await AuthenticationService.AuthenticateAsync(
            new AuthenticationStateProviderOptions { ReturnUrl = returnUrl });

        if (authResult.Succeeded)
        {
            // 使用相对路径跳转
            Navigation.NavigateTo(returnUrl, forceLoad: true);
        }
        else
        {
            Navigation.NavigateTo("/authentication/login-failed");
        }
    }
}

3. 确认Azure AD应用配置

确保Azure AD应用注册中的重定向URI设置正确,即/authentication/login-callback,与代码中的配置一致,避免因URI不匹配导致的额外重定向问题。

验证测试

修改后,访问https://localhost:44395/test时,会生成类似authentication/login?returnUrl=test的跳转链接,登录完成后将正确重定向到/test页面。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 12:45:33