为什么这个 cookie 不发送到其他子域?
Why isn't this cookie sent to other subdomains?
我们有用于登录的身份验证 API 和提供受保护文件的文件下载 API。
身份验证 API 位于 authentication.api.mysite.com
和 returns 以下 header 成功 sign-in:
Set-Cookie: sessionId=QpiYzBXNNhiMZQSdWfKiDM; SameSite=None; Secure; HttpOnly; Domain=.mysite.com
(我也试过 Domain=.mysite.com
,即带前导点,但运气不好。)
文件 API 位于 files.api.mysite.com
并允许客户端根据以下请求下载受保护的文件 header:
Cookie: sessionId=QpiYzBXNNhiMZQSdWfKiDM
API 由位于 something.othersite.com
的网络应用程序使用。在浏览器开发工具中,我看到 sign-in 响应在“Cookies”选项卡中有 cookie,所以我知道它已设置。并且 cookie 被发送到其他请求以对抗身份验证 API。但是在对文件 API.
的请求中没有发送 cookie
据我了解(例如 MDN),如果 Domain
设置为 mysite.com
(或 .mysite.com
由其他来源判断),那么它也应该是发送到 api.mysite.com
和 whatever.api.mysite.com
。但它不会发送到其他子域。
我们做错了什么?我们如何才能让浏览器将身份验证 API 设置的 cookie 传递到文件 API?
如果相关:两个 API 都使用 CORS,设置为允许我们正在使用的特定主机(不是通配符),允许任何方法,允许任何 header,允许凭据,并公开一组我认为不相关的 header(Set-Cookie
不包括在那里,但我们添加它时没有任何区别)。
cookie 正确;问题是由 front-end 调用 API 的方式引起的。 front-end使用axios,解决方案是使用withCredentials
选项,例如:
axios.post(
url,
data,
{ headers: headers,
withCredentials: true }
)
我们有用于登录的身份验证 API 和提供受保护文件的文件下载 API。
身份验证 API 位于 authentication.api.mysite.com
和 returns 以下 header 成功 sign-in:
Set-Cookie: sessionId=QpiYzBXNNhiMZQSdWfKiDM; SameSite=None; Secure; HttpOnly; Domain=.mysite.com
(我也试过 Domain=.mysite.com
,即带前导点,但运气不好。)
文件 API 位于 files.api.mysite.com
并允许客户端根据以下请求下载受保护的文件 header:
Cookie: sessionId=QpiYzBXNNhiMZQSdWfKiDM
API 由位于 something.othersite.com
的网络应用程序使用。在浏览器开发工具中,我看到 sign-in 响应在“Cookies”选项卡中有 cookie,所以我知道它已设置。并且 cookie 被发送到其他请求以对抗身份验证 API。但是在对文件 API.
据我了解(例如 MDN),如果 Domain
设置为 mysite.com
(或 .mysite.com
由其他来源判断),那么它也应该是发送到 api.mysite.com
和 whatever.api.mysite.com
。但它不会发送到其他子域。
我们做错了什么?我们如何才能让浏览器将身份验证 API 设置的 cookie 传递到文件 API?
如果相关:两个 API 都使用 CORS,设置为允许我们正在使用的特定主机(不是通配符),允许任何方法,允许任何 header,允许凭据,并公开一组我认为不相关的 header(Set-Cookie
不包括在那里,但我们添加它时没有任何区别)。
cookie 正确;问题是由 front-end 调用 API 的方式引起的。 front-end使用axios,解决方案是使用withCredentials
选项,例如:
axios.post(
url,
data,
{ headers: headers,
withCredentials: true }
)