【问题标题】:Cookie from subdomain A not sent to subdomain B来自子域 A 的 Cookie 未发送到子域 B
【发布时间】:2020-12-23 02:24:29
【问题描述】:

我有一个托管在 dev.subdomain.mydomain.com 上的前端 Angular 应用程序。该应用程序向托管在dev.api.mydomain.com 上的 .net CORE API 发出 HTTP 请求。我的 Angular 应用程序有一个与之关联的会话 cookie,具有以下安全属性:

Secure=true
HttpOnly=true
SameSite=None
Domain=.mydomain.com

我希望在每次请求时都将 cookie 发送到后端服务器,但由于某种原因,请求在没有它的情况下发送。

我添加了一个角度拦截器,它将withCredentials 选项添加到传出请求中

req = req.clone({
       headers: req.headers.set('Content-Type', 'application/json'),
       withCredentials: true
});

但这也无济于事。在 Chrome 和 Firefox 中都进行了测试,结果相同。

Update 2:我已经设置了我的 API,以便在预检响应中包含以下标头:

Access-Control-Allow-Origin: https://dev.subdomain.mydomain.com
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: content-type,withcredentials
Access-Control-Allow-Methods: GET

Cookie 仍未发送。

【问题讨论】:

  • Cookies 应该只在前端使用。您到底想在服务器端使用 cookie 做什么?
  • 它是一个会话 cookie。我用它通过后端安全系统识别用户
  • Oauth 令牌不是比尝试使用 cookie 更好的解决方案吗?
  • 我们将此 icookie n 与 jwt 令牌结合使用。这是我们正在尝试解决的遗留系统。我的问题是我需要将 cookie 发送到服务器,我觉得这种情况并不罕见
  • @mduck 你找到解决方案了吗?甚至我也面临着类似的问题。

标签: angular http cookies session-cookies httpcookie


【解决方案1】:

如果前端和 API 都在 *.mydomain.com 下,那么它们应该算作同一站点,这意味着 SameSite=Lax 应该没问题。

如果您查看 Chrome 开发人员工具,那么“问题”选项卡应该会告诉您任何受 SameSite 默认值影响或未正确设置属性的 cookie。

在“网络”选项卡中,如果您选择单个请求,您还可以查看那里的 Cookie 子面板并启用“显示过滤掉的请求 cookie”以显示哪些 cookie 被丢弃。将鼠标悬停在它们上方还会提供一个工具提示来解释原因。

【讨论】:

    猜你喜欢
    • 2018-03-09
    • 1970-01-01
    • 2021-01-21
    • 1970-01-01
    • 2018-08-31
    • 2012-03-04
    • 1970-01-01
    • 2011-04-21
    • 2012-06-09
    相关资源
    最近更新 更多