Сбой установки ServiceStack CORS, поскольку ответ на предполетный полет не проходит проверку контроля доступа - PullRequest
1 голос
/ 03 марта 2020

Мы пытаемся настроить ServiceStack и CORS в нашей тестовой среде. В настоящее время безопасность IIS не настроена (анонимно). При попытке установить соединение с клиентом (React) запрос отклоняется с

"Доступом к выборке в 'https://xxx?format=json" из источника "http://localhost: 3000 'была заблокирована политикой CORS: Ответ на предполётный запрос не проходит проверку контроля доступа: в запрашиваемом ресурсе отсутствует заголовок «Access-Control-Allow-Origin». Если непрозрачный ответ удовлетворяет ваши потребности, задайте запрос режим «no-cors» для извлечения ресурса с отключенным CORS. "

Мы попробовали описанное ниже, чтобы настроить ServiceStack, но мы не уверены, является ли это проблемой настройки сервера или проблемой установки клиента.

Here's my request:

const https = require("https");

function deleteStaffMember(e) {
  console.log(e.currentTarget.name)
  try {
    const res = fetch(`https://xxx/${e.currentTarget.name}?format=json`, {
      method: 'DELETE',
      agent: new https.Agent({
        rejectUnauthorized: false
      }),
      credentials: 'omit'
    })
  } catch(err) {
    console.log(err)
  }
}

Вот попытки стека службы AppHost, от текущих к предыдущим попыткам:

public override void Configure(Container container)
{
    //Permit modern browsers (e.g. Firefox) to allow sending of any HTTP Method
    SetConfig(new HostConfig 
    {
        GlobalResponseHeaders = {
          { "Access-Control-Allow-Origin", "*" },
          { "Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS" },
          { "Access-Control-Allow-Headers", "Content-Type" },
        },
    });
}

ранее:

Plugins.Add(new CorsFeature(
    allowOriginWhitelist: *,
    allowCredentials: false,
    allowedHeaders: *));

еще раньше:

Plugins.Add(new CorsFeature(
    allowOriginWhitelist: new[] { "http://localhost","http://localhost:3000" },
    allowCredentials: true,
    allowedHeaders: "Content-Type, Allow, Authorization, X-Args"));

оригинал:

Plugins.Add(new CorsFeature());

РЕДАКТИРОВАТЬ Вот мое УДАЛЕНИЕ (я полагаю, это не ' получить столько же, потому что это предполетный запрос):

DELETE / NDBServiceStack / staff /ierarchy / 13 15 Происхождение: http://localhost: 3000 Ссылка: http://localhost: 3000 / index Принимать: / Пользователь-агент: Mozilla / 5.0 (Macintosh; Intel Ma c OS X 10_14_6) AppleWebKit / 605.1.15 (K HTML, как Gecko) Версия / 13.0.5 Safari / 605.1.15

Ответы [ 2 ]

1 голос
/ 16 марта 2020

Проработав больше с mythz, мы решили эту проблему. Я обнаружил, что для решения проблемы необходимо внести изменения как на стороне сервера, так и на стороне клиента. Вот требования для IIS 10 в нашем случае.

enter image description here

0 голосов
/ 04 марта 2020

Если вашему запросу требуются файлы cookie, т.е. он использует сеансы для аутентификации, они должны быть включены в запрос JS fetch(), и я бы также указал режим для разрешения запросов CORS, например:

const res = fetch(`https://xxx/${e.currentTarget.name}?format=json`, {
  method: 'DELETE',
  agent: new https.Agent({
    rejectUnauthorized: false
  }),
  mode: 'cors',
  credentials: 'include'
})

Ваш белый список Access-Control-Allow-Origin должен затем явно включать источник, который вы хотите разрешить, который из вашего описания может быть http://localhost:3000:

Plugins.Add(new CorsFeature(
    allowOriginWhitelist: new[] { "http://localhost:3000" },
    allowCredentials: true,
    allowedHeaders: "Content-Type, Allow, Authorization, X-Args"));
...