如何解决为什么不将此Cookie发送到其他子域?
我们有一个用于登录的身份验证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.com
和whatever.api.mysite.com
。但是它不会发送到其他子域。
我们在做什么错?我们如何让浏览器将身份验证API设置的cookie传递到文件API?
在相关的情况下:两种API都使用CORS,设置为允许我们正在使用的特定主机(不是通配符),允许任何方法,允许任何标头,允许凭证,并公开一组我不使用的标头认为是相关的(Set-Cookie
并未包含在其中,但添加时没有什么区别)。
解决方法
该Cookie是正确的;该问题是由前端如何调用API引起的。前端使用axios,解决方案是使用withCredentials
选项,例如:
axios.post(
url,data,{ headers: headers,withCredentials: true }
)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。