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

跨子域共享ASP.NET Core身份验证Cookie问题求助

跨子域共享ASP.NET Core 3.1 Cookie认证的可行方案

1. 正确配置Cookie认证核心参数

在Startup.cs的ConfigureServices方法中,统一Cookie的名称、域、安全策略和SameSite属性,确保所有子域应用使用一致配置:

services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
    .AddCookie(options =>
    {
        options.Cookie.Name = "SharedAuthCookie"; // 所有子域应用共用此Cookie名称
        options.Cookie.Domain = ".your-root-domain.com"; // 根域前加英文点,覆盖所有子域
        options.Cookie.SameSite = SameSiteMode.None; // 跨域场景必须设置为None,需配合HTTPS
        options.Cookie.SecurePolicy = CookieSecurePolicy.Always; // 强制Cookie仅通过HTTPS传输
    });

2. 配置统一的数据保护系统

ASP.NET Core通过数据保护加密Cookie,所有子域应用必须使用相同的密钥存储和应用标识,否则无法解密彼此的Cookie:

services.AddDataProtection()
    .SetApplicationName("YourGlobalAppIdentifier") // 所有子域应用使用同一标识
    .PersistKeysToFileSystem(new DirectoryInfo("/var/shared-auth-keys")); // Linux上的共享密钥目录

注意:需给共享密钥目录设置正确权限,确保所有应用进程(如www-data)有读写权限:
chown -R www-data:www-data /var/shared-auth-keys

3. 修复Apache反向代理的头信息传递

Apache反向代理必须正确转发Host和X-Forwarded-*头,否则ASP.NET Core会识别错误的域名,导致Cookie域不匹配。修改虚拟主机配置:

<VirtualHost *:443>
    ServerName app1.your-root-domain.com
    ProxyPreserveHost On
    ProxyPass / http://localhost:5000/
    ProxyPassReverse / http://localhost:5000/

    RequestHeader set X-Forwarded-Proto "https"
    RequestHeader set X-Forwarded-Host "%{HTTP_HOST}s"

    # SSL相关配置省略
</VirtualHost>

同时在ASP.NET Core中启用转发头处理,在Startup.cs的ConfigureServices中添加:

services.Configure<ForwardedHeadersOptions>(options =>
{
    options.ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto | ForwardedHeaders.XForwardedHost;
    options.KnownProxies.Add(IPAddress.Parse("127.0.0.1")); // 添加Apache服务器的IP地址
});

并在Configure方法最开头调用:

app.UseForwardedHeaders();

4. 验证Cookie属性有效性

登录后用浏览器开发者工具(Application -> Cookies)检查:

  • Cookie的Domain是否为配置的根域(.your-root-domain.com)
  • Secure属性是否为true
  • SameSite属性是否为None
    若属性不符,逐一排查上述配置是否生效。

5. 统一所有子域应用的配置

所有需要实现SSO的子域应用,必须完全复用以上所有配置项,包括Cookie名称、域、数据保护参数、反向代理头配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 17:20:14