在 SPA 中设置 API cookie

Setting API cookies in SPA

上下文

我正在编写一个 SPA,其中前端和后端由不同的域提供服务:

为简单起见,我尝试使用 cookie 进行身份验证。登录时,服务器响应set-cookieheader,如下图:

在向 API 发出后续请求时,应包含 cookie 以确保用户已通过身份验证。例如:

问题

这一切在 localhost:5000 上为 API 和 localhost:4200 上的前端提供服务时一切正常,但在部署时不起作用。正如您在下面的屏幕截图中看到的,sign-in 响应具有正确的 set-cookie header,但浏览器似乎并未设置 cookie,因此未发送未来的请求。

登录后回复:

后续请求:

问题

有没有办法让它在两个不同的域中工作?还是出于安全原因被禁止?如果我使用 mywebsite.comapi.mywebsite.com 中的子域,它会起作用吗?它是否适用于两个子域,如 frontend.mywebsite.comapi.mywebsite.com

经过更多研究,我发现我对 cookie (samesite=lax) 使用了错误的 SameSite 配置。根据 MDN,samesite=lax 意味着 cookie 不会在正常的跨站点子请求中发送(例如将图像或框架加载到第三方站点),而是在用户导航到原始站点(即跟随 link 时)。

使用 samesite=none 解决了这个问题,因为这意味着 cookie 将在所有上下文中发送,即响应第一方和跨源请求