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

.NET Framework 4.7.2站点如何共享同域.NET Core站点的身份验证凭证

方案1:共享身份验证Cookie(首选,适配同域名场景)

注意:浏览器Cookie不绑定端口,只要主域名一致,不同端口的站点可以读取到同域下的Cookie,这是本方案可行的核心前提。你之前调试失败大概率是两边加密规则、Cookie配置参数没有完全对齐,按照以下步骤调整即可。

.NET Core 端配置

  • 首先安装Nuget包Microsoft.AspNetCore.DataProtection,如果用本地文件共享密钥,无需额外安装其他包
  • 在Program.cs中配置完全一致的应用标识和共享密钥存储,示例代码:
// 配置统一的数据保护规则,两边配置必须完全对齐
builder.Services.AddDataProtection()
    .SetApplicationName("SharedSSO_App") // 名称必须和.NET Framework端完全一致
    .PersistKeysToFileSystem(new DirectoryInfo(@"C:\SharedSSO_KeyStore\")) // 同服务器下给两个站点进程都开放读权限的目录
    .DisableAutomaticKeyGeneration(); // 生产环境可按需调整,保证两边密钥一致即可

// 配置身份验证Cookie
builder.Services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
    .AddCookie(options =>
    {
        options.Cookie.Name = ".SharedSSO.Auth";
        options.Cookie.Domain = "your-main-domain.com"; // 填写两个站点共用的主域名,不要带端口
        options.Cookie.SameSite = SameSiteMode.Lax;
        options.Cookie.HttpOnly = true;
        options.Cookie.SecurePolicy = CookieSecurePolicy.SameAsRequest; // 生产环境建议设为Always,全站走HTTPS
        options.LoginPath = "/Account/Login";
    });
  • 登录逻辑正常调用HttpContext.SignInAsync生成Cookie即可。

.NET Framework 4.7.2 端配置

必须使用Owin中间件对接,首先安装对应的兼容Nuget包:Microsoft.Owin.Security.Cookies、Microsoft.Owin.Host.SystemWeb、Microsoft.AspNetCore.DataProtection.SystemWeb(核心兼容包,用于识别.NET Core生成的加密Cookie)

  • 删除web.config中的machineKey节点,避免原有ASP.NET加密逻辑和DataProtection规则冲突
  • 在Owin Startup.cs的Configuration方法中添加以下配置:
public void Configuration(IAppBuilder app)
{
    // 配置和.NET Core端完全一致的数据保护规则
    app.UseDataProtection(new DataProtectionOptions
    {
        ApplicationDiscriminator = "SharedSSO_App" // 和Core端的SetApplicationName参数完全一致
    });

    // 配置Cookie认证,所有Cookie参数必须和Core端完全对齐
    app.UseCookieAuthentication(new CookieAuthenticationOptions
    {
        AuthenticationType = CookieAuthenticationDefaults.AuthenticationType,
        CookieName = ".SharedSSO.Auth",
        CookieDomain = "your-main-domain.com",
        CookieHttpOnly = true,
        CookieSameSite = SameSiteMode.Lax,
        CookieSecure = CookieSecureOption.SameAsRequest,
        LoginPath = new PathString("/Account/Login.aspx"),
        Provider = new CookieAuthenticationProvider
        {
            // 可选:如果两边Claims结构有差异,可在此处做身份信息转换
            OnValidateIdentity = context =>
            {
                // 自定义身份校验逻辑,按需编写
                return Task.CompletedTask;
            }
        }
    });
}
方案2:共享JWT令牌(备选,适合后续多站点扩展)

如果不想调整现有Cookie逻辑,可通过JWT实现身份共享:

  • .NET Core端登录成功后,生成JWT令牌并存到主域名的Cookie中,JWT的签名密钥、过期时间、签发者、受众参数两边要提前约定完全一致
  • .NET Framework端添加全局请求过滤器,每次请求读取JWT,校验签名合法后直接给当前请求赋值身份标识,完成身份验证
方案3:统一身份认证服务(长期架构升级方案)

如果后续还有其他站点需要接入,可搭建标准OIDC身份服务,两个站点都作为客户端对接,走标准授权码流程,天然支持跨站点单点登录,后续扩展灵活性更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 22:45:04