【发布时间】: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.com 和whatever.api.mysite.com。但它不会发送到其他子域。
我们做错了什么?我们如何让浏览器将认证API设置的cookie传递给文件API?
如果相关:两个 API 都使用 CORS,设置为允许我们使用的特定主机(不是通配符),允许任何方法,允许任何标头,允许凭据,并公开一组我不使用的标头think 是相关的(Set-Cookie 不包括在内,但我们添加它时没有任何区别)。
【问题讨论】:
-
我没有从标题中看到任何内容,Chrome DevTools 是否在“网络”面板中针对 cookie 显示任何内容?即,如果您选择请求,转到 cookie 选项卡,您应该能够看到过滤掉的 cookie 并悬停它们被阻止的原因。还值得检查您是否通过隐身模式、您的设置或扩展程序启用了第三方 cookie 阻止。 samesite-sandbox.glitch.me 在这里可能会有所帮助。
-
好像已经是一些前端代码了。现在可以了。我会调查并发布答案。