ASP. NET Core: Windows Аутентификация с исключением OPTIONS (предварительная проверка CORS) - PullRequest
0 голосов
/ 28 апреля 2020

Я работаю над одностраничным веб-приложением. Он имеет ASP. NET Core 3 back end и Angular 9 front end. Я запускаю серверную часть в Visual Studio на IIS Express, на http://localhost: 59280 . Внешний интерфейс запускается в коде Visual Studio с использованием ng serve, при http://localhost: 4200 . Ранее мне не нужно было включать CORS в бэкэнде, потому что я тестировал приложение только в Chrome, и добавления аргумента командной строки --disable-web-security было достаточно для отключения той же политики происхождения. На работающем сервере нет необходимости в CORS, описанная выше ситуация перекрестного источника возникает только на моем компьютере разработчика.

Теперь я хотел бы отладить интерфейс в Firefox, но так как невозможно Отключите ту же политику происхождения для Firefox, мне нужно включить CORS на заднем конце. К сожалению, это не работает, потому что я использую Windows Аутентификацию, и он останавливает неавторизованный предварительный запрос CORS по умолчанию . Это можно было бы решить, если бы я мог позволить запросам HTTP OPTIONS обрабатываться без Windows Аутентификация . Я думал, что это можно сделать, добавив что-то вроде этого в web.config :

<system.webServer>
  <security>
    <authentication>
      <anonymousAuthentication enabled="true" />
    </authentication>
    <authorization>
      <add accessType="Allow" verbs="OPTIONS" users="*" />
    </authorization>
  </security>
</system.webServer>

... но я получил сообщение об ошибке: «Этот раздел конфигурации не может использоваться в этом путь. Это происходит, когда раздел заблокирован на родительском уровне. " Очевидно, что web.config находится в конфликте с launchSettings. json, который, кажется, управляет аутентификацией, когда серверная часть запускается на IIS Express в Visual Studio, используя эти две строки:

{
  "iisSettings": {
    "windowsAuthentication": true,
    "anonymousAuthentication": false,
    ...

Не знаю, как можно отключить Windows Аутентификацию отдельно для запросов HTTP OPTIONS, используя только launchSettings. json.

Есть ли способ отключить Windows Аутентификация отдельно для запросов HTTP OPTIONS, в ASP. NET приложении Core 3?

1 Ответ

0 голосов
/ 28 апреля 2020

1) Вышеуказанные настройки web.config работают, мне нужно было только разблокировать раздел «anonymousAuthentication» в applicationhost.config в каталоге .vs: <section name="anonymousAuthentication" overrideModeDefault="Allow" />. Значение параметра "anonymousAuthentication" в launchSettings. json не имеет значения.

2) Следуя предложению @ MartinStaufcik, я добавил промежуточное ПО в начале StartUp.Configure ( ), который отвечает на предварительный запрос ( MDN ):

app.Use(async (context, next) => {
  if (context.Request.Method == "OPTIONS") {
    context.Response.StatusCode = 204;
    context.Response.Headers.Add("Access-Control-Allow-Origin", context.Request.Headers["Origin"]);
    context.Response.Headers.Add("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
    context.Response.Headers.Add("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");
    context.Response.Headers.Add("Access-Control-Allow-Credentials", "true");
    return;
  }
  await next();
});

3) Мне также пришлось добавить { withCredentials: true } к аргументам HttpClient.post () в передней части Angular 9. Без этого запрос OPTIONS получил 204, а последующий POST получил 401.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...