为什么不将此Cookie发送到其他子域?

时间:2020-08-11 17:06:28

标签: cookies subdomain

我们有一个用于登录的身份验证API和一个用于提供受保护文件的文件下载API。

身份验证API位于authentication.api.mysite.com中,并在成功登录后返回以下标头:

Set-Cookie: sessionId=QpiYzBXNNhiMZQSdWfKiDM; SameSite=None; Secure; HttpOnly; Domain=.mysite.com

(我也尝试过Domain=.mysite.com,即使用前导点,但没有运气。)

文件API位于files.api.mysite.com,并允许客户端根据以下请求标头下载受保护的文件:

Cookie: sessionId=QpiYzBXNNhiMZQSdWfKiDM

位于something.othersite.com的Web应用程序使用这些API。在浏览器开发工具中,我看到登录响应在“ Cookies”选项卡中具有cookie,因此我知道它已设置。然后将cookie发送到针对身份验证API的其他请求。但是没有cookie发送到文件API的请求中。

据我了解(例如MDN),如果将Domain设置为mysite.com(或由其他来源判断为.mysite.com),则也应将其发送到api.mysite.comwhatever.api.mysite.com。但是它不会发送到其他子域。

我们在做什么错?我们如何让浏览器将身份验证API设置的cookie传递到文件API?

在相关的情况下:两种API都使用CORS,设置为允许我们正在使用的特定主机(不是通配符),允许任何方法,允许任何标头,允许凭证,并公开一组我不使用的标头认为是相关的(Set-Cookie并未包含在其中,但添加时没有什么区别)。

1 个答案:

答案 0 :(得分:0)

该Cookie是正确的;该问题是由前端如何调用API引起的。前端使用axios,解决方案是使用withCredentials选项,例如:

axios.post(
  url,
  data, 
  { headers: headers,
    withCredentials: true }
)
相关问题