.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
相关产品推荐
相关产品推荐

