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

.NET 6与React中子域向主域发送Cookie无法访问的问题

跨域Cookie问题修复方案

核心问题分析

Postman能正常获取Cookie是因为它不受浏览器跨域安全策略限制,而浏览器会严格校验Cookie的Domain、SameSite等属性,你当前的配置存在两个关键错误:


1. 修正Cookie的Domain属性

Cookie的Domain字段不能包含协议前缀(https://),且要设置为能覆盖主域和子域的根域名格式,同时必须配合Secure和SameSite属性适配跨域场景:

TokenHandler tokenHandler = new TokenHandler(configuration);
Token token = tokenHandler.CreateAccessToken(user);
user.RefreshToken = token.RefreshToken;
user.RefrestTokenEndDate = token.Expiration.AddMinutes(3);
await context.SaveChangesAsync();

var cookieOptions = new CookieOptions
{
    Expires = DateTime.UtcNow.AddHours(24),
    Domain = ".batuhanfindik.com", // 根域名格式,主域和所有子域均可访问
    Secure = true, // 强制HTTPS下传输,适配SSL配置
    SameSite = SameSiteMode.None, // 跨域场景必须设置为None
    HttpOnly = true // 可选,防止XSS攻击提升安全性
};

Response.Cookies.Append("AccessToken", token.AccessToken, cookieOptions);

若仅需主域www.batuhanfindik.com访问,可将Domain设为www.batuhanfindik.com,但根域名格式更灵活,支持后续新增子域共享Cookie。

2. 客户端请求必须携带凭证

React发起请求时,必须明确告知浏览器携带Cookie,以axios和fetch为例:

  • Axios配置:
axios.post('https://你的子域API地址/login', 登录数据, {
    withCredentials: true
});
  • Fetch配置:
fetch('https://你的子域API地址/login', {
    method: 'POST',
    credentials: 'include',
    body: JSON.stringify(登录数据),
    headers: {
        'Content-Type': 'application/json'
    }
});

3. 确保Web API的CORS策略正确配置

ASP.NET Core中需开启允许凭证的CORS策略,指定主域为允许源:

// 服务配置阶段
builder.Services.AddCors(options =>
{
    options.AddPolicy("AllowMainDomain", policy =>
    {
        policy.WithOrigins("https://www.batuhanfindik.com")
              .AllowAnyHeader()
              .AllowAnyMethod()
              .AllowCredentials(); // 必须开启,否则浏览器会拒绝接收Cookie
    });
});

// 中间件注册阶段(需放在UseRouting之后,UseAuthorization之前)
app.UseCors("AllowMainDomain");

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 02:10:54