请记住,此问题特定于 HttpOnly
标志设置为 true
的 cookie。
我很确定我的问题的答案是否定的,但我很难通过官方文档或其他帖子找到答案。以下是一些上下文的简单用例:
- Python 后端 Web 应用程序 (api.domain.com)
- 前端 JavaScript SPA (app.domain.com)
- 使用 axios 和正确的
用户名
从app.domain.com
向api.domain.com/api/auth/login/
发出请求code> 和password
返回正文中带有access
JWT token 的响应,并且响应设置带有 HttpOnly 标志的refresh
cookie [应该失败,因为我认为无法通过对api.domain.com
的 API 请求在app.domain.com
上设置 cookie? -- 这是我的问题] 访问
token 存储在内存中并随每个 API 请求一起传递- 按计划发送向
api.domain.com/api/auth/refresh/
发出的请求,以刷新短期访问
token 。
我通常将前端应用程序和后端应用程序托管在同一个子域 (app.domain.com
) 上,并使用 CloudFront 或 nginx 等进行基于路径的路由,这效果很好。例如,所有以 /api/*
开头的请求都会发送到后端,所有其他请求都会发送到前端应用程序。无论我使用什么选项在服务器上设置 cookie,尝试为 API 使用单独的子域似乎都会失败。
有人可以帮助我确认实际上不可能通过 api.domain.com 上托管的 API 请求在
?如果有人也可以帮助我找到在官方文档中可以找到的地方,那就太好了。app.domain.com
等子域上设置 HttpOnly cookie
搜索跨子域设置httpOnly cookie
,我没有找到任何直接相关的内容。我也没有在这些资源中找到任何可以直接回答我的问题的内容:
https://owasp.org/www-community/HttpOnly
https://learn.microsoft.com/en-us/previous-versions//ms533046(v=vs.85)?redirectedfrom=MSDN
最佳答案
这是可能的。事实上我刚刚做到了。
在您的前端,使用 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,
});
});
关于authentication - 是否可以将 HttpOnly Cookie 从一个域设置到另一个子域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69483501/