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

ASP.NET Core Razor Page登出重定向异常:点击登出后显示白屏

问题原因及解决方案

问题原因

  1. 你使用了MicrosoftIdentity区域的登出端点,但自定义的SignOut方法仅处理了Cookie认证,未完成OpenID Connect(OIDC)的完整登出流程。当框架检测到OIDC会话存在时,会自动触发默认的OIDC登出请求,跳转到signout-oidc页面,而该页面未配置回调地址,导致白屏。
  2. 自定义的SignOut逻辑与框架默认的OIDC登出流程冲突,导致重定向规则失效。

解决方案

方案一:利用框架自带流程配置重定向(推荐)

如果你的应用基于Microsoft Identity(如Azure AD、Identity Server等OIDC提供商),直接复用框架的登出流程并配置重定向地址即可:

  1. 移除自定义的Account控制器SignOut方法,MicrosoftIdentity区域已提供默认的登出端点。
  2. 在Program.cs中配置OIDC认证的登出重定向:
builder.Services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
    .AddMicrosoftIdentityWebApp(options =>
    {
        builder.Configuration.Bind("AzureAd", options);
        // 设置登出后跳转至首页
        options.PostLogoutRedirectUri = "/";
    });
  1. 保留原登出按钮代码:
<a href='@Url.Action("SignOut", "Account", new { Area = "MicrosoftIdentity" })' class="logout-button">Logout</a>

点击登出后,框架会先完成OIDC提供商的会话登出,再自动跳转至你配置的首页。

方案二:自定义完整登出流程

如果需要手动控制登出逻辑,需同时处理OIDC和Cookie的登出流程:

  1. 修改SignOut方法代码:
public async Task<IActionResult> SignOut()
{
    // 触发OIDC登出,并指定登出后跳转地址
    await HttpContext.SignOutAsync(OpenIdConnectDefaults.AuthenticationScheme, new AuthenticationProperties
    {
        RedirectUri = "/"
    });
    // 清除本地Cookie认证会话
    await HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme);
    return new EmptyResult();
}
  1. 调整登出按钮的地址(若自定义控制器不在MicrosoftIdentity区域,需移除Area参数):
<a href='@Url.Action("SignOut", "Account")' class="logout-button">Logout</a>

关键注意点

  • 使用OIDC认证时,登出必须同时处理本地Cookie会话和身份提供商的远程会话,仅清除Cookie会导致框架触发默认的OIDC登出流程,引发白屏问题。
  • 确保PostLogoutRedirectUri已在OIDC提供商的后台配置为允许的重定向地址(例如Azure AD的应用注册中需添加该地址到"登出URL"列表),否则可能会被提供商拦截。

内容的提问来源于stack exchange,提问作者Fabian H.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 23:47:35