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

配置自定义域名后,ASP.NET Core Identity的SignOutAsync()无法删除应用Cookie

问题原因分析

这不是ASP.NET Core Identity的Bug,核心原因是SignOutAsync()默认使用的认证Scheme未正确关联你配置的跨域Cookie设置,登出操作时没有读取到Cookie.Domain的配置值,导致生成的登出Cookie未带上顶级域名.mysite.com,浏览器因此不会清除跨域范围内的Cookie。

解决办法

方法1:显式指定认证Scheme登出

调用SignOutAsync时,明确指定Cookie认证的默认Scheme,确保使用你配置的Cookie选项:

using Microsoft.AspNetCore.Authentication.Cookies;

public async Task<IActionResult> Logout()
{
    await _signInManager.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme);
    return RedirectToAction(nameof(HomeController.Index), "Home");
}

方法2:确保Identity关联自定义Cookie配置

确认ConfigureApplicationCookie的配置顺序在AddIdentity或AddDefaultIdentity之后,避免配置被覆盖,同时保证Identity的SignInManager使用该自定义配置:

// 先配置Identity核心服务
builder.Services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
    .AddEntityFrameworkStores<ApplicationDbContext>()
    .AddSignInManager<SignInManager<IdentityUser>>();

// 再配置应用Cookie的跨域参数
builder.Services.ConfigureApplicationCookie(options =>
{
    options.Cookie.Name = ".AspNet.SharedCookie";
    options.Cookie.Path = "/";
    options.Cookie.Domain = ".mysite.com";
    options.LogoutPath = "/Account/Logout";
});

方法3:通过HttpContext直接执行登出

若上述方法无效,可直接使用HttpContext.SignOutAsync,确保登出操作应用正确的Cookie配置:

public async Task<IActionResult> Logout()
{
    await HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme, new AuthenticationProperties
    {
        RedirectUri = Url.Action(nameof(HomeController.Index), "Home")
    });
    return new EmptyResult();
}
验证要点
  • 打开浏览器开发者工具的Application标签,检查登出请求的响应头,确认是否返回了带有.mysite.com域名的清空Cookie指令。
  • 确保两个应用的SetApplicationName完全一致(你的配置中已设置为"MySite",此部分正确),密钥共享功能正常。
  • 确认ConfigureApplicationCookie代码执行顺序在Identity服务配置之后,防止自定义配置被默认值覆盖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 03:22:40