问题描述
这是一个协议问题 - 与特定的编程语言无关。
假设我们目前有:
- 使用域名的网站:
example.com
- 前端应用位于:
example.com/example-front
- API 位于:
example.com/api/example-data
- 使用 HTTPS 的所有地址。
- 前端应用调用 API 进行登录并获取
set-cookie: data=SOME_DATA; Secure; httpOnly; Path=/; Domain=example.com
并按预期工作。
- 我们想将前端应用从
example.com/example-front
转移到front.example.com
。 - API 将保持在同一地址。
应该怎么做(前端/后端/子域网关)才能使这项工作正常进行?
(已经尝试设置 domain=.example.com
和 sameSite=None
)。
解决方法
在检查了所有需要做的事情并在生产中也进行了验证后,解决此问题的步骤是:
从前端角度:
- 如果您使用的是 axios / XHR - 添加 withCredentials: true
- 如果您使用 fetch - 添加凭据:true
从后端角度(API):
- 添加标题:“access-control-allow-origin:[指定具体的子域,包括协议。例如:https://sub.example.com]”
- 添加“access-control-allow-credentials: true”
- 在“set-cookie”标头处,您应该提及:“httpOnly;安全的;域=example.com; sameSite=None;”