是否可以将一个 HttpOnly Cookie 从一个域设置到另一个子域

问题描述 投票:0回答:2

我最初在这里发布了这个问题:https://security.stackexchange.com/questions/255737/is-it-possible-to-set-an-httponly-cookie-from-one-domain-to-another-subdomain

请记住,这个问题是针对

HttpOnly
标志设置为
true
的 cookie 的。

我很确定我的问题的答案是否定的,但我一直很难通过官方文档或此处的其他帖子找到答案。这是某些上下文的简单用例:

  1. Python 后端 Web 应用程序 (api.domain.com)
  2. 前端 JavaScript SPA (app.domain.com)
  3. 使用具有正确
    api.domain.com/api/auth/login/
    app.domain.com
    的axios向
    username
    发出的
    password
    请求在正文中返回带有
    access
    JWT令牌的响应,并且响应设置带有HttpOnly标志的
    refresh
    cookie [应该会失败,因为我认为无法在 API 请求到
    app.domain.com
    api.domain.com
    上设置 cookie? -- 这是我的问题]
  4. access
    令牌存储在内存中并随每个 API 请求传递
  5. api.domain.com/api/auth/refresh/
    发出的请求按计划发送以刷新短暂的
    access
    令牌。

我通常在同一个子域 (

app.domain.com
) 上托管前端应用程序和后端应用程序,并使用诸如 CloudFront 或 nginx 之类的东西进行基于路径的路由,这很有效。例如,所有以
/api/*
开头的请求都发送到后端,所有其他请求都发送到前端应用程序。无论我使用什么选项在服务器上设置 cookie,尝试为 API 使用单独的子域似乎都失败了。

有人可以帮我确认实际上不可能在

app.domain.com
这样的子域上设置 HttpOnly cookie 来自
api.domain.com
上托管的 API 请求吗?如果有人也能帮我找到这可能在官方文档中找到的地方,那就太好了。

搜索

set httpOnly cookie across subdomains
,我没有找到任何直接相关的东西。我也没有在这些资源中找到任何可以直接回答我的问题的内容:

https://owasp.org/www-community/HttpOnly

https://learn.microsoft.com/en-us/previous-versions//ms533046(v=vs.85)?redirectedfrom=MSDN

authentication cookies single-page-application httponly cookie-httponly
2个回答
1
投票

这是可能的。事实上,我刚刚做到了。

在您的前端,使用 Axios:

const baseURL = 'https://api.example.com';

const api = axios.create({
  baseURL,
  withCredentials: true,
});

在您的后端,使用 Express:

app.use(
  cors({
    origin: 'https://www.example.com',
    credentials: true,
  }),
);

app.post('/login', async (req, res) => {
  res.cookie('someCookie', someCookieValue, {
    secure: true,
    domain: 'example.com',
    httpOnly: true,
  });
});

0
投票

所以在我花了一天时间解决这个问题之后,我将结束这篇文章的尝试。 跨域 Cookies

我终于明白了,很多人都在谈论将 cookie 从 PageA 中的 PageB 发送到 PageA 的解决方案。但这不是我要找的。所以在这篇文章中,对我来说,得票最多的答案是不正确的,但接下来的答案让我更清楚了。

我认为理解我们想要什么是关键,我试图将 Cookie 从 PageB 中的 PageB 发送到 PageA。这似乎是不可能的。 (我只谈论 http cookies。)。如果这不正确,我很高兴得到一个解决方案,但另一方面,从安全的角度来看,它也没有任何意义。

© www.soinside.com 2019 - 2024. All rights reserved.