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

.NET Core 8中Web与API项目身份验证Cookie共享问题排查

问题排查与解决方案

核心问题分析

你的场景中笔记本能正常运行但开发机不行,结合代码和环境差异,主要存在以下关键问题:

1. InMemory数据库无法跨进程共享

InMemory是进程内数据库,Razor Pages和Web API是两个独立运行的进程,各自维护完全独立的TestDb实例。API中注册的用户数据不会同步到Razor Pages的数据库,即便Cookie配置正确,Razor Pages也找不到对应用户记录,导致登录状态不生效。

2. Web API项目缺少认证中间件

你的API代码仅调用了builder.Services.AddAuthorization(),但未在管道中启用认证中间件,导致Identity API生成的Cookie无法被正确处理,Razor Pages自然无法识别。

3. Cookie共享配置不完善

虽然你设置了Cookie名称和路径,但缺少跨端口共享所需的SameSite、Domain等关键配置,加上开发机可能存在的权限或HTTPS证书问题,进一步导致Cookie无法跨项目传递。


分步解决方案

步骤1:替换为共享数据库

放弃InMemory数据库,改用支持跨进程共享的数据库(如SQL Server LocalDB、SQLite),确保两个项目连接到同一数据库实例。

以SQLite为例,修改两个项目的AddDbContext配置:

// 两个项目使用相同的SQLite数据库文件路径
builder.Services.AddDbContext<ApplicationDbContext>(options =>
    options.UseSqlite(@"Data Source=C:\Visual Studio 2022\TestAppShared.db"));

步骤2:完善Web API的管道配置

在API的Program.cs中添加认证和授权中间件,确保管道顺序正确:

var app = builder.Build();

if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

app.UseHttpsRedirection();

// 新增以下两行,顺序不可调换
app.UseAuthentication();
app.UseAuthorization();

app.MapIdentityApi<IdentityUser>();

app.Run();

步骤3:优化Cookie共享配置

在两个项目的ConfigureApplicationCookie中补充以下配置,确保跨端口共享:

builder.Services.ConfigureApplicationCookie(options =>
{
    options.Cookie.Name = ".TestApp.SharedCookie";
    options.Cookie.Path = "/";
    // 显式设置Domain为localhost,支持跨端口共享
    options.Cookie.Domain = "localhost";
    // 开发环境设置SameSite为Lax(若用HTTPS可设为None,但需配合Secure=true)
    options.Cookie.SameSite = SameSiteMode.Lax;
    // 适配开发环境HTTPS自签名证书,自动跟随请求协议设置Secure属性
    options.Cookie.SecurePolicy = CookieSecurePolicy.SameAsRequest;
    // 可选:延长Cookie有效期,方便测试
    options.ExpireTimeSpan = TimeSpan.FromHours(2);
});

步骤4:检查DataProtection密钥目录权限

确保开发机上C:\Visual Studio 2022\TestApiSecurity.Web目录的读写权限:

  • 右键目录 → 属性 → 安全 → 确认当前Windows用户拥有读取和写入权限
  • 若权限不足,添加当前用户并赋予对应权限,确保两个项目能共享加密密钥

验证步骤

  1. 同时启动Razor Pages和Web API项目
  2. 通过Swagger调用API的注册/登录接口,确认返回成功
  3. 刷新Razor Pages项目页面,检查登录状态是否正常显示

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 17:47:36