浏览器不存储来自 ASP.NET Web API Docker 的 Http Cookie

问题描述 投票:0回答:1

我运行 ASP.NET Web api 项目,这是 Docker 容器中的一个微服务。我在另一个容器中有 React + Vite 应用程序。我正在尝试从该微服务发送一个 http cookie 到前端。我可以在 Set-cookie 的响应中看到 cookie,但是我的浏览器拒绝存储它(应用程序 -> Cookies ),并且 cookie 也不存在于请求中。

在我的主机文件中我有:

127.0.0.1 praxeosu.local

127.0.0.1 auth.praxeosu.local

 var cookieOptions = new CookieOptions
 {
     HttpOnly = true,
     Secure = true,
     SameSite = SameSiteMode.None,
     IsEssential = true,
     Expires = DateTime.UtcNow.AddHours(3),
     Domain = "auth.praxeosu.local" //note I also tried praxeosu.local or with dot at beginning - no success
 };

附加到端点中的请求:

Response.Cookies.Append("Bearer", result.Data.Token, result.Data.Cookie);
return Ok();

我的 CORS 设置

builder.Services.AddCors(options =>
{
    options.AddPolicy("AllowAll",
        builder => builder.AllowAnyMethod()
                            .WithOrigins("https://praxeosu.local", "https://praxeosu.local:5001", "https://auth.praxeosu.local:5001")
                            .AllowAnyHeader()
                            .AllowCredentials());
});

在 React 中,我使用 axios 并将 withCredentials 设置为 true。

我的NGINX:

server {
    listen 443 ssl http2;
    server_name praxeosu.local;

    ssl_certificate /etc/nginx/ssl/praxeosu.local.crt;
    ssl_certificate_key /etc/nginx/ssl/private/praxeosu.local.key;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256";
    
    location / {
        root /usr/share/nginx/html;
        try_files $uri /index.html;
    }
}

# NGINX konfigurace pro Authorization Service API
server {
    listen 443 ssl http2;
    server_name auth.praxeosu.local;

    ssl_certificate /etc/nginx/ssl/praxeosu.local.crt;
    ssl_certificate_key /etc/nginx/ssl/private/praxeosu.local.key;


    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256";
    

    location / {
        proxy_pass https://authorizationservice:5001;
        proxy_set_header Host auth.praxeosu.local;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

我有自签名证书,浏览器没有问题,并且显示前端正在安全 https 上运行(当我打开 swagger 时后端也是如此)

但是浏览器仍然没有保存cookie,我不知道问题还出在哪里。 也许这是一个愚蠢的问题,但我对 cookie、react 和 nginx 是新手

谢谢你, 卢卡斯

我尝试更改 cookie 中的域、更改 SameSite 模式等。浏览器仍然拒绝保存 cookie,并将其与请求一起发送回来。

.net docker nginx cookies asp.net-core-webapi
1个回答
0
投票

解决方案:

我完全失明了,因为反应没有说出任何一句话。

解决方案是这样的:

const response = await axios.post('/api/v1/auth/login', { email: `${email}@osu.cz`, password: password }, { withCredentials: true });

我必须将 withCredentials 移到单独的括号中。 原来的代码是这样的:

const response = await axios.post('/api/v1/auth/login', {
    email: `${email}@osu.cz`,
    password: password,
    withCredentials: true
});

注意差异。也许它会帮助像我这样盲目的人,无意冒犯:)

谢谢你, 卢卡斯

© www.soinside.com 2019 - 2024. All rights reserved.