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

如何实现两个ASP.NET Core应用的Cookie共享登录?

两个同端口ASP.NET Core应用实现跨应用自动登录方案

两个同端口的ASP.NET Core独立应用要实现登录一个自动登录另一个,Cookie共享是可行的核心方案,但需要满足特定配置前提——首先得明确:两个独立应用同端口运行,必然是通过虚拟路径(如/app1、/app2)或反向代理(如Nginx按路径转发)部署的,否则会出现端口冲突无法同时启动。以下是具体实现方案及排查要点:

一、Cookie共享的正确配置步骤

Cookie共享的核心是让两个应用能互相解密对方生成的认证Cookie,这依赖于统一的数据保护机制和一致的Cookie配置:

1. 配置共享数据保护容器

ASP.NET Core的认证Cookie是加密存储的,两个应用必须使用相同的数据保护密钥和配置,才能解密彼此的Cookie。在两个应用的Program.cs中添加以下配置:

// 两个应用都需要配置这段代码
builder.Services.AddDataProtection()
    .PersistKeysToFileSystem(new DirectoryInfo(@"D:\SharedAuthKeys")) // 共享密钥存储路径,确保两个应用都有读写权限
    .SetApplicationName("SharedAuthenticationApp"); // 相同的应用名称,确保密钥环一致

生产环境建议用更安全的存储方式(如Redis、云密钥管理服务),而非本地文件系统。

2. 统一Cookie认证配置

两个应用的Cookie认证选项必须完全一致,尤其是Cookie名称、域名、路径:

builder.Services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
    .AddCookie(options =>
    {
        options.Cookie.Name = ".SharedAuthCookie"; // 两个应用必须用相同的Cookie名称
        options.Cookie.Domain = "yourdomain.com"; // 生产环境填实际域名,本地测试用"localhost"
        options.Cookie.Path = "/"; // 设置为根路径,确保所有虚拟路径下的应用都能访问该Cookie
        options.Cookie.SameSite = SameSiteMode.Lax; // 同域名下Lax模式足够,可按需调整
        // 确保用共享的数据保护来序列化认证票据
        options.TicketDataFormat = new TicketDataFormat(
            builder.Services.BuildServiceProvider().GetRequiredService<IDataProtector>()
        );
    });

3. 确保中间件顺序正确

在两个应用的Program.cs中,认证中间件必须在授权中间件和路由中间件之前:

app.UseAuthentication(); // 先执行认证
app.UseAuthorization(); // 再执行授权

app.MapControllers(); // 最后配置路由

二、Cookie共享适配失败的排查要点

如果之前尝试官方方案失败,可从以下几点排查:

  • 数据保护密钥是否真的共享:检查共享密钥目录是否生成了密钥文件,两个应用是否有该目录的读写权限,是否设置了相同的SetApplicationName。
  • Cookie属性是否一致:用浏览器开发者工具(F12)查看Cookie的Name、Domain、Path是否完全匹配,有没有被浏览器拦截(比如SameSite设为Strict导致跨路径无法访问)。
  • 部署路径干扰:如果是IIS虚拟应用,检查IIS是否自动修改了Cookie路径,可通过代码强制设置options.Cookie.Path = "/"覆盖。

三、替代方案:单点登录(SSO)

如果Cookie共享确实无法适配你的场景,可以采用OpenID Connect(OIDC)单点登录方案:

  • 搭建一个独立的身份认证服务器(用ASP.NET Core Identity Server实现)。
  • 将两个应用配置为OIDC客户端,用户在任意一个应用登录时,会跳转到身份认证服务器完成登录,登录成功后两个应用都会获取到认证令牌,实现自动登录。
  • 这种方案更灵活,不受应用部署方式限制,适合多应用统一身份认证的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 12:58:55