1

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

我的代理设置返回正确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重定向。这会有影响吗??这就是为什么我有代理表的原因......

此外,由于看起来响应正常,我已经删除了onProxyRes希望自动设置它的字段,但也没有运气。

我很欣赏任何想法/解决方案。

4

1 回答 1

2

我不确定这是否是最佳实践,但似乎 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;
    }
  },
};
于 2019-09-11T03:04:42.483 回答