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

.NET6中OpenIdConnect登出时认证Cookie未删除的问题

.NET6 OpenIdConnect登出时认证Cookie未删除的解决方案

在.NET6环境下集成OpenIdConnect作为认证提供商,登录功能正常,但执行登出操作时认证Cookie无法自动删除。尝试过常规SignOutAsync调用均无效,目前仅能通过Cookie认证的OnSigningOut事件手动删除Cookie,以下是更合理的解决方法:

1. 显式触发双Scheme登出操作

登出需要同时通知OpenIdConnect身份提供商注销会话,并清除本地认证Cookie。之前的调用仅针对单一Scheme,需同时指定两个Scheme:

修改Logout端点代码:

app.Map("/Logout", map =>
{
    map.Run(async context =>
    {
        // 先触发OpenIdConnect登出,再清除本地Cookie
        await context.SignOutAsync(ChallengeScheme);
        await context.SignOutAsync(AuthenticateScheme, new AuthenticationProperties { RedirectUri = "/" });
    });
});

注意替换ChallengeScheme和AuthenticateScheme为你配置中对应的Scheme名称。

2. 校验OpenIdConnect的SignOutScheme配置

确保OpenIdConnect配置中SignOutScheme正确指向Cookie认证Scheme:

.AddOpenIdConnect(ChallengeScheme, options =>
{
    options.SignOutScheme = AuthenticateScheme;
    // 其他原有配置...
});

3. 检查Cookie认证的匹配配置

如果Cookie有自定义路径、域名等设置,清除时必须完全匹配,否则无法删除。确保Cookie配置前后一致:

.AddCookie(AuthenticateScheme, options =>
{
    options.Cookie.Path = "/";
    options.Cookie.Domain = null; // 若有自定义域名,需和登录时保持一致
    // 移除手动删除Cookie的OnSigningOut事件
});

4. 确认中间件顺序正确

中间件顺序直接影响登出逻辑,确保Logout端点映射在认证中间件之前,且认证中间件位置正确:

// 先映射Logout端点
app.Map("/Logout", map =>
{
    map.Run(async context =>
    {
        await context.SignOutAsync(ChallengeScheme);
        await context.SignOutAsync(AuthenticateScheme, new AuthenticationProperties { RedirectUri = "/" });
    });
});

// 后续中间件顺序
app.UseRouting();
app.UseCors();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
    endpoints.MapControllerRoute(name: "Default", pattern: "{controller}/{action}/{id?}");
    endpoints.MapControllers();
    endpoints.MapRazorPages();
    endpoints.MapContent();
});

5. 排查第三方中间件干扰

暂时禁用UseGetaCategories等第三方中间件,测试登出是否正常,排查是否存在中间件冲突导致Cookie无法清除。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 07:39:23