Blazor WebApp(8.0):实现Logout功能并自定义登出跳转页面
问题解决方案
1. 更新配置文件指定登出重定向目标
在appsettings.json的AzureAdB2c节点添加SignedOutRedirectUri,指向你的自定义登录页路由:
{ "AzureAdB2c": { "callbackPath": "/signin-oidc", "signedOutCallbackPath": "/signout-callback-oidc", "SignedOutRedirectUri": "/CustomLogin", // 替换为实际自定义登录页路径 "clientId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx", "domain": "xxxxxxxxb2cdev.onmicrosoft.com", "instance": "https://xxxxxxxxb2cdev.b2clogin.com/", "tenantId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx", "SignUpSignInPolicyId": "B2C_1A_CC24PORTAL", "RedirectUri": "https://dev-xxxxxxxx-ui-eus-as.azurewebsites.net" }, "BuildConfiguration": "DEV" }
2. 覆盖OpenIdConnect登出回调逻辑
在program.cs中修改身份认证配置,强制登出后跳转到自定义登录页:
builder.Services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme) .AddMicrosoftIdentityWebApp(options => { builder.Configuration.Bind("AzureAdB2c", options); // 自定义登出回调的重定向行为 options.Events.OnSignedOutCallbackRedirect = context => { context.Response.Redirect(options.SignedOutRedirectUri); context.HandleResponse(); return Task.CompletedTask; }; });
3. 替换Logout链接为代码触发逻辑
将NavMenu.razor中的静态链接改为按钮,添加完整的登出流程(包含清除本地会话数据):
<div class="nav-item px-3"> <button class="nav-link btn btn-link" @onclick="HandleLogout"> <span class="bi bi-box-arrow-right-nav-menu" aria-hidden="true"></span> Logout </button> </div> @code { @inject NavigationManager NavManager @inject IHttpContextAccessor HttpContextAccessor @inject ILocalStorageService LocalStorage private async Task HandleLogout() { // 清除本地存储的用户会话数据(如角色、用户信息) await LocalStorage.RemoveItemAsync("userSessionData"); // 替换为实际存储键 // 清除ASP.NET Core认证Cookie await HttpContextAccessor.HttpContext.SignOutAsync(OpenIdConnectDefaults.AuthenticationScheme); // 强制跳转到自定义登录页 NavManager.NavigateTo("/CustomLogin", forceLoad: true); } }
4. 验证Azure B2C后台配置
确保自定义登录页的URL已添加到Azure B2C应用注册的**回复URL(重定向URI)**列表中,同时确认登出策略的重定向设置允许指向该URL。
内容的提问来源于stack exchange,提问作者Ram
相关产品推荐
相关产品推荐

