在 SPA 中设置 API cookie
Setting API cookies in SPA
上下文
我正在编写一个 SPA,其中前端和后端由不同的域提供服务:
mywebsite.com
myapi.com
为简单起见,我尝试使用 cookie 进行身份验证。登录时,服务器响应set-cookie
header,如下图:
在向 API 发出后续请求时,应包含 cookie 以确保用户已通过身份验证。例如:
问题
这一切在 localhost:5000
上为 API 和 localhost:4200
上的前端提供服务时一切正常,但在部署时不起作用。正如您在下面的屏幕截图中看到的,sign-in
响应具有正确的 set-cookie
header,但浏览器似乎并未设置 cookie,因此未发送未来的请求。
登录后回复:
后续请求:
问题
有没有办法让它在两个不同的域中工作?还是出于安全原因被禁止?如果我使用 mywebsite.com
和 api.mywebsite.com
中的子域,它会起作用吗?它是否适用于两个子域,如 frontend.mywebsite.com
和 api.mywebsite.com
?
经过更多研究,我发现我对 cookie (samesite=lax
) 使用了错误的 SameSite
配置。根据 MDN,samesite=lax
意味着 cookie 不会在正常的跨站点子请求中发送(例如将图像或框架加载到第三方站点),而是在用户导航到原始站点(即跟随 link 时)。
使用 samesite=none
解决了这个问题,因为这意味着 cookie 将在所有上下文中发送,即响应第一方和跨源请求。
上下文
我正在编写一个 SPA,其中前端和后端由不同的域提供服务:
mywebsite.com
myapi.com
为简单起见,我尝试使用 cookie 进行身份验证。登录时,服务器响应set-cookie
header,如下图:
在向 API 发出后续请求时,应包含 cookie 以确保用户已通过身份验证。例如:
问题
这一切在 localhost:5000
上为 API 和 localhost:4200
上的前端提供服务时一切正常,但在部署时不起作用。正如您在下面的屏幕截图中看到的,sign-in
响应具有正确的 set-cookie
header,但浏览器似乎并未设置 cookie,因此未发送未来的请求。
登录后回复:
后续请求:
问题
有没有办法让它在两个不同的域中工作?还是出于安全原因被禁止?如果我使用 mywebsite.com
和 api.mywebsite.com
中的子域,它会起作用吗?它是否适用于两个子域,如 frontend.mywebsite.com
和 api.mywebsite.com
?
经过更多研究,我发现我对 cookie (samesite=lax
) 使用了错误的 SameSite
配置。根据 MDN,samesite=lax
意味着 cookie 不会在正常的跨站点子请求中发送(例如将图像或框架加载到第三方站点),而是在用户导航到原始站点(即跟随 link 时)。
使用 samesite=none
解决了这个问题,因为这意味着 cookie 将在所有上下文中发送,即响应第一方和跨源请求。