【问题标题】:http-proxy-middleware "set-cookie" response does not set in browser浏览器中未设置 http-proxy-middleware “set-cookie”响应
【发布时间】:2019-09-10 22:06:08
【问题描述】:

我曾尝试查看过去对此类问题的响应,例如以下内容,但它们都会引发各种错误:

我的代理设置返回正确的 Response Headers 并设置 cookie:set-cookie: JSESSIONID=yElsHUaPE8Ip_AAD_oIfTQ; Path=/; Secure; 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 字段,希望它会自动设置它,但也没有运气。

感谢任何想法/解决方案。

【问题讨论】:

    标签: node.js express cookies proxy http-proxy-middleware


    【解决方案1】:

    我不确定这是否是最佳实践,但似乎 JSESSIONID cookie 不喜欢与 Secure 标志一起存储。这是我更新的代理选项:

    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。通常,如果您在开发中运行,除非您使用自签名证书或 ngrok 之类的服务,否则您不会使用 HTTPS。一个解决方案可能是删除“安全”标志仅在开发中并将其留在生产中,此时查看器将通过 HTTPS 连接。
    猜你喜欢
    • 2021-07-20
    • 2014-08-24
    • 2020-10-07
    • 1970-01-01
    • 2016-11-19
    • 2021-11-03
    • 2012-05-02
    • 2018-10-26
    • 2022-02-16
    相关资源
    最近更新 更多