Ответ http-proxy-middleware set-cookie не устанавливается в браузере

Я пытался просмотреть прошлые ответы на вопросы такого типа, например следующие, но все они выдают различные ошибки:

Мои настройки прокси-сервера возвращают правильный 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, надеясь, что оно установится автоматически, но тоже не повезло.

Я ценю любые идеи/решения.


person Phil Lucks    schedule 10.09.2019    source источник


Ответы (1)


Я не уверен, что это лучшая практика, но кажется, что файл cookie JSESSIONID не любит храниться с флагом 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;
    }
  },
};
person Phil Lucks    schedule 11.09.2019
comment
Помните, что удаление флага безопасности из файла cookie означает, что он доступен через соединения, отличные от HTTPS! Это плохая новость, если ваш файл cookie содержит токен аутентификации. Любой, у кого есть возможность видеть свой трафик (например, анализаторы пакетов в Wi-Fi кафе), сможет просмотреть этот файл cookie, извлечь токен, а затем выполнить действия, как если бы он был этим пользователем. Безопасный флаг существует не просто так! - person Murphy Randle; 08.01.2020
comment
Если файл cookie настроен как безопасный, тогда соединение с вашим прокси-сервером должно быть установлено с использованием HTTPS, чтобы файл cookie был установлен. Часто, если вы работаете в разработке, вы не будете использовать HTTPS, если только вы не используете самозаверяющий сертификат или такую ​​службу, как ngrok. Решение может состоять в том, чтобы убрать флаг безопасности только в разработке и оставить его в работе, когда зрители будут подключаться через HTTPS. - person Murphy Randle; 08.01.2020