Node.js http代理中间件“;设置cookie";浏览器中未设置响应
我曾尝试查看过去对此类问题的回应,例如以下,但它们都会引发各种错误:Node.js http代理中间件“;设置cookie";浏览器中未设置响应,node.js,express,cookies,proxy,http-proxy-middleware,Node.js,Express,Cookies,Proxy,Http Proxy Middleware,我曾尝试查看过去对此类问题的回应,例如以下,但它们都会引发各种错误: 我的代理安装程序返回正确的响应头并设置cookie:设置cookie:JSESSIONID=yElsHUaPE8Ip_AAD_oIfTQ;路径=/;保护HttpOnly。这些不是会话cookie 但是,我的登录正式失败,因为JSESSIONID没有存储为cookie 以下是我的代理设置: const proxyTable = { "/url": "http://localhost:4040/url", "pr
响应头并设置cookie:设置cookie:JSESSIONID=yElsHUaPE8Ip_AAD_oIfTQ;路径=/;保护HttpOnly代码>。这些不是会话cookie
但是,我的登录正式失败,因为JSESSIONID
没有存储为cookie
以下是我的代理设置:
const proxyTable = {
"/url": "http://localhost:4040/url",
"proxy.url.com/": "http://localhost:4040/",
};
const signin_proxy_options = {
target: host,
autoRewrite: true,
secure: true,
reqBodyEncoding: null,
changeOrigin: true,
logLevel: "debug",
router: proxyTable,
protocolRewrite: "http",
cookieDomainRewrite: { "*": "" },
onProxyRes: function(proxyRes, req, res) {
if (proxyRes.headers["set-cookie"] !== undefined) {
console.log("** SET-COOKIE: ", proxyRes.headers["set-cookie"]);
const cookieJar = proxyRes.headers["set-cookie"];
// cookieJar = 'JSESSIONID=yElsHUaPE8Ip_AAD_oIfTQ; Path=/; Secure; HttpOnly;'
var temp = cookieJar.split(";")[0].split("=");
// temp = [ 'JSESSIONID', 'yElsHUaPE8Ip_AAD_oIfTQ' ]
res.cookie(temp[0], temp[1]);
}
},
};
// Proxy configuration
const signin_proxy = proxy(signin_filter, signin_proxy_options);
app.use("/signin", signin_proxy);
成功时,服务器返回一个302
以重定向。这会有影响吗??这就是为什么我有proxyTable的原因
另外,由于看起来响应正常,我删除了onProxyRes
字段,希望它能自动设置,但也没有运气
我很欣赏任何想法/解决方案。我不确定这是否是最佳做法,但JSESSIONID cookie似乎不喜欢使用安全
标志存储。这是我更新的代理选项:
const signin_proxy_options = {
target: host,
autoRewrite: true,
secure: true,
changeOrigin: true,
logLevel: "debug",
protocolRewrite: "http",
onProxyRes: function(proxyRes, req, res) {
if (proxyRes.headers["set-cookie"] !== undefined) {
proxyRes.headers["set-cookie"] = proxyRes.headers[
"set-cookie"
][0].replace("Secure; ", ""); // JSESSIONID cookie cannot be set thru proxy with Secure
return proxyRes;
}
},
};
请记住,从cookie中删除安全标志意味着它可以通过非https连接使用!如果您的cookie包含身份验证令牌,则这是个坏消息。任何有能力查看其流量的人(例如,咖啡店wi-fi上的数据包嗅探器)都将能够查看该cookie,提取令牌,然后像用户一样执行操作。安全标志存在是有原因的!如果cookie设置为“安全”,则需要使用HTTPS提供到代理的连接,以便设置cookie。通常,如果您在开发中运行,您将不会使用HTTPS,除非您使用的是自签名证书或类似ngrok的服务。一个解决方案可能是仅在开发阶段删除“安全”标志,并在观众通过HTTPS连接时将其保留在生产阶段。