Интеграция прокси-сервера API GW Lambda CORS

Попытка отправить cookie обратно после запроса на вход на сайт моего хобби-проекта. По какой-то причине он работает при локальном запуске, то есть http://localhost:3000. Но как только я запускаю свой API в сети и пытаюсь получить к нему доступ через мой живой веб-сайт, я не вижу файлов cookie в разделе «Приложение» -> «Файлы cookie» -> «Веб-сайт» (используя хром). Я много гуглил и, кажется, поставил галочку перед каждой политикой CORS.

NodeJS работает в AWS lambda и вызывается через API-шлюз. API GW направляется через облачный дистрибутив (если это имеет значение).

В моем экспресс-бэкэнде я соответствующим образом зарегистрировал свои заголовки:

res.cookie('jwt', token, cookieOptions);
console.info('Checking cookie', res);
console.info('Checking cookie', res.cookies);

res.status(statusCode).json({
  status: 'success',
  data: {
    user
  }
});

Результат этого частично таков:

'access-control-allow-origin': [ 'Access-Control-Allow-Origin', 'https://example.com' ],
 vary: [ 'Vary', 'Origin' ],
 'access-control-allow-credentials': [ 'Access-Control-Allow-Credentials', 'true' ],
 'access-control-allow-methods':
  [ 'Access-Control-Allow-Methods',
    'GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS' ],
 'access-control-allow-headers':
  [ 'Access-Control-Allow-Headers',
    'Origin, X-Requested-With, Content-Type, Accept, X-PINGOTHER' ],
 'x-ratelimit-limit': [ 'X-RateLimit-Limit', 100 ],
 'x-ratelimit-remaining': [ 'X-RateLimit-Remaining', 97 ],
 date: [ 'Date', 'Fri, 11 Dec 2020 23:20:28 GMT' ],
 'x-ratelimit-reset': [ 'X-RateLimit-Reset', 1607732145 ],
 quizappuserloggedin: [ 'QuizAppUserLoggedIn', 'false' ],
 'set-cookie':
  [ 'Set-Cookie', 'my-cookie'; Path=/; Expires=Sat, 12 Dec 2020 23:20:34 GMT; HttpOnly; Secure'

Из того, что я могу сказать, я правильно установил свои настройки CORS. Из моего интерфейса я установил:

axios.defaults.withCredentials = true;

Из того, что я могу сказать, я сделал все, что мог найти в Установить куки для запросов перекрестного происхождения

Это означает, что я дважды проверил свои настройки cors, и из инструкции печати похоже, что файл cookie отправляется. Но почему браузер его не видит?

Если это поможет, я мог бы опубликовать реальный сайт и репозиторий github, я застрял здесь навсегда.

ОБНОВЛЯТЬ

Я просмотрел заголовки ответов в своем браузере и сравнил их с заголовками в бэкэнд-API. Из этого сравнения я вижу, что мой заголовок «set-cookie» не включен в ответ, хотя я ясно вижу, что он включен в ответ от бэкэнда:

ОБНОВЛЕНИЕ 2

Я считаю, что после дальнейшего расследования я сузил проблему до проблемы CORS с AWS API Gateway. Я изучил их, но все равно не повезло.

Как добавить заголовок CORS в ответ AWS API Gateway с активацией интеграции лямбда-прокси

Шлюз Amazon API игнорирует set-cookie

Журналы из lambda cloudwatch непосредственно перед отправкой ответа экспресс-платформой, а также журналы cloudwatch из шлюза API (заголовки ответов).

Журналы API GW cloudwatch заголовков ответов:

Журналы Lambda cloudwatch объекта ответа, отправленного экспресс-платформой:

Вы пытаетесь получить доступ к файлу cookie в своем интерфейсном приложении с перекрестным происхождением (т. Е. Во внешнем JS-коде) или вы просто хотите убедиться, что файл cookie возвращается на серверную часть с каждым запросом? Потому что последнее можно сделать, следуя шагам, указанным в предоставленной вами ссылке, но на самом деле внешний код не может получить прямой доступ к файлам cookie другого источника.

Nick 12.12.2020 01:08

Я пытаюсь получить к нему доступ в своем интерфейсе для аутентификации. Чем занимается этот парень: youtube.com/…

Frankster 12.12.2020 01:16

Он использует httpOnly файлы cookie, поэтому он никак не может получить к ним доступ в коде своего внешнего приложения.

Nick 12.12.2020 01:18

«Файл cookie с атрибутом HttpOnly недоступен для JavaScript Document.cookie API; он отправляется только на сервер». developer.mozilla.org/en-US/docs/Web/HTTP/Cookies

Nick 12.12.2020 01:18

Конечно, в этом все дело, он «защищен» от доступа через js. Но мое намерение (или я так думал) заключалось в том, что я создам запрос на вход в систему, получу ответ с файлом cookie, который хранится в браузере, который позже будет автоматически включен в любой запрос, который я делаю для того же домена. Под «доступом» я не имел в виду фактический доступ через код, просто чтобы уточнить.

Frankster 12.12.2020 01:21

Да, так и будет, но если вы не увидите его в списке файлов cookie для вашего приложения, которое находится в другом источнике. Файл cookie прикрепляется, когда выполняется запрос к домену, которому принадлежит файл cookie.

Nick 12.12.2020 01:24

Вы обнаружите, что ваш объект запроса при последующих запросах больше не имеет файла cookie?

Nick 12.12.2020 01:26

Ну, куки никогда не появляются в браузере, никогда. Я просто вижу это при локальном запуске интерфейса и API.

Frankster 12.12.2020 01:27

Может быть проблема в том, что API работает в API GW, который, в свою очередь, направляется через облачный фронт. Файл cookie каким-то образом «принадлежит» домену api gw или cloudfront, а не моему «веб-сайту»

Frankster 12.12.2020 01:29

Важно понимать, что если ваш бэкэнд находится на api.example.com, а ваш интерфейс — на www.example.com, например, вы никогда не увидите файлы cookie api.example.com в своем списке файлов cookie для www.example.com. . Файлы cookie зависят от источника, за исключением отсутствия изоляции портов. Но даже если вы не видите файл cookie api.example.com, он все равно может быть привязан к запросам браузера к этому домену.

Nick 12.12.2020 01:30

Я верю, что понимаю. У меня есть свой веб-сайт по адресу example.com, и любой запрос, сделанный на example.com/api/v1/*, направляется на мой серверный API. Возможно, мне следует просто включить файл cookie в тело и сохранить его в локальном хранилище.

Frankster 12.12.2020 01:32

Если вы используете файл cookie HttpOnly, он все равно должен работать из разных источников. Чтобы проверить это, попробуйте изменить локальный сервер или внешний интерфейс на 127.0.0.1, и вы увидите, что файл cookie все еще работает, но не отображается в списке файлов cookie.

Nick 12.12.2020 01:34

Если я изменю свой интерфейс на 127.0.0.1 и вызову API из локального экземпляра, я получу ошибку CORS.

Frankster 12.12.2020 09:54

Привет, вы пытались добавить домен в файл cookie; как Домен=${Домен}; здесь домен должен быть доменом вашего приложения или приложение должно находиться в поддомене.

G. Bahaa 16.12.2020 09:28

да, я пробовал как на уровне домена, так и на уровне поддомена.

Frankster 16.12.2020 19:49
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
15
271
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Оказывается, это не проблема CORS. Я просто забыл переслать файлы cookie из моего облачного дистрибутива.

Другие вопросы по теме