Как вывести в консоль интерфейсы CorsRequest и IncomingHttpHeaders в функции cors зависимости npm cors?

Вопрос или проблема

В настоящее время в своем проекте я реализовал CORS с использованием функции обратного вызова, как показано в официальной документации npm cors.

const whitelistedDomain = ['https://test1.com', 'https://test2.com', 'https://test3.com'];

const corsConfiguration = {
  origin: (origin, callback) => {
    if (whitelistedDomain.indexOf(origin) !== -1) {
      logger.info('Разрешенный домен, обращающийся к серверу -> ' + origin);
      callback(null, true);
    } else {
      callback(new Error(`Этот домен не в белом списке -> ${origin}`));
    }
  },
  optionsSuccessStatus: 200, // Для поддержки устаревших браузеров
  credentials: true,
};

app.use(cors(corsConfiguration));

Когда я запускаю это в локальной среде, я попытался вызвать API, поставив домен, не входящий в белый список, в заголовке запроса Origin. Сервер возвращает ошибку, как и предполагалось, а в журнале консоли отображается следующее:

Этот домен не в белом списке -> https://test4.com

Однако мое приложение было опубликовано на AWS ECS, и когда я попытался получить доступ к API, используя домен, не входящий в белый список, он по-прежнему смог успешно вызвать API, и CORS не сработал. В AWS Cloudwatch показан следующий журнал:

Этот домен не в белом списке -> undefined

Все работает нормально с доменом, не входящим в белый список, и он должен был записать это в Cloudwatch, но этого не произошло, что означает, что программа вообще не выполняет этот код.

Разрешенный домен, обращающийся к серверу -> {{разрешенный домен}}

Мне кажется, что что-то произошло на бэкенде AWS, поскольку задействованы балансировщики нагрузки, которые могут потреблять некоторые элементы в заголовке запроса?

Мой вопрос заключается в том, как мне отладить зависимость CORS в этой строке?

app.use(cors(corsConfiguration));

Я хочу получить доступ к интерфейсу CorsRequest и вывести в консоль IncomingHttpHeaders, которые находятся внутри самой библиотеки cors.

введите описание изображения здесь

введите описание изображения здесь

Ответ или решение

Для отладки настроек CORS в вашем приложении, работающем на AWS ECS, можно использовать несколько подходов для анализа и логирования информации о запросах, включая интерфейс CorsRequest и заголовки IncomingHttpHeaders. Вот шаги, которые помогут вам сделать это:

1. Редактирование конфигурации CORS:

Чтобы логировать информацию о заголовках запроса и проверить, корректно ли поступает заголовок Origin, можно изменить вашу конфигурацию CORS следующим образом:

const corsConfiguration = {
  origin: (origin, callback) => {
    // Логируем весь объект запроса
    console.log('Incoming Request Headers:', origin);

    // Дополнительный лог для анализа
    console.log('CorsRequest Object:', { requestOrigin: origin });

    // Проверяем, есть ли origin в белом списке
    if (whitelistedDomain.indexOf(origin) !== -1) {
      logger.info('Whitelisted domain that is calling the server -> ' + origin);
      callback(null, true);
    } else {
      callback(new Error(`This domain is not whitelisted -> ${origin}`));
    }
  },
  optionsSuccessStatus: 200, // Для поддержки устаревших браузеров
  credentials: true,
};

2. Использование Middleware для логирования заголовков:

Если вы хотите захватить больше информации из заголовков HTTP, добавьте middleware перед CORS, чтобы логировать все заголовки:

app.use((req, res, next) => {
  console.log('Incoming Request Headers:', req.headers);
  next(); // Продолжаем выполнение следующего middleware
});

app.use(cors(corsConfiguration));

3. Проверка конфигурации AWS:

Убедитесь, что в настройках вашего нагрузки (Load Balancer) не происходит фильтрация или изменение заголовков. Важно, чтобы заголовок Origin передавался до вашего приложения. Зачастую Load Balancer может перехватывать CORS-запросы и не передавать их корректно. Проверьте следующее:

  • Настройки CORS в Load Balancer: Если используется Application Load Balancer (ALB), проверьте настройки CORS, чтобы удостовериться, что заголовки не перехватываются.
  • Проверка сетевых потоков: Убедитесь, что ваши сетевые правила безопасности и группы безопасности (Security Groups) позволяют прохождение трафика как для HTTP, так и для HTTPS.

4. Тестирование API:

Проверьте API, используя инструмент, как Postman, чтобы имитировать вызовы из неразрешенных доменов. Таким образом, вы сможете увидеть, как ваше приложение реагирует вне браузера.

Заключение:

Корректное использование логов и анализ заголовков поможет выявить проблему. Учтите, что помимо конфигурации вашего приложения, проблемы с CORS также могут быть вызваны настройками инфраструктуры, такой как Load Balancer и правилами безопасности в AWS. Используйте приведенные рекомендации для углубленного анализа и логирования.

Оцените материал
Добавить комментарий

Капча загружается...