【问题标题】:Why isn't this cookie sent to other subdomains?为什么这个 cookie 不发送到其他子域?
【发布时间】:2020-12-01 09:45:42
【问题描述】:

我们有一个用于登录的身份验证 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

这些 API 由位于 something.othersite.com 的网络应用程序使用。在浏览器开发工具中,我看到登录响应在“Cookies”选项卡中有 cookie,所以我知道它已设置。并且 cookie 被发送到针对身份验证 API 的其他请求。但在对文件 API 的请求中不会发送任何 cookie。

据我了解(例如MDN),如果Domain 设置为mysite.com(或根据其他一些来源判断为.mysite.com),那么它也应该发送到api.mysite.comwhatever.api.mysite.com。但它不会发送到其他子域。

我们做错了什么?我们如何让浏览器将认证API设置的cookie传递给文件API?

如果相关:两个 API 都使用 CORS,设置为允许我们使用的特定主机(不是通配符),允许任何方法,允许任何标头,允许凭据,并公开一组我不使用的标头think 是相关的(Set-Cookie 不包括在内,但我们添加它时没有任何区别)。

【问题讨论】:

  • 我没有从标题中看到任何内容,Chrome DevTools 是否在“网络”面板中针对 cookie 显示任何内容?即,如果您选择请求,转到 cookie 选项卡,您应该能够看到过滤掉的 cookie 并悬停它们被阻止的原因。还值得检查您是否通过隐身模式、您的设置或扩展程序启用了第三方 cookie 阻止。 samesite-sandbox.glitch.me 在这里可能会有所帮助。
  • 好像已经是一些前端代码了。现在可以了。我会调查并发布答案。

标签: cookies subdomain


【解决方案1】:

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

axios.post(
  url,
  data, 
  { headers: headers,
    withCredentials: true }
)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-11
    • 2012-06-09
    • 2011-02-09
    • 1970-01-01
    • 2022-08-05
    • 2021-08-08
    • 2014-09-13
    • 2020-12-23
    相关资源
    最近更新 更多