Ответ на предполетный запрос не проходит проверку контроля доступа в signalR

Приложение безупречно работало в .net core 2.1. Конфигурация сервера signalR выглядит как следующий фрагмент кода в public void ConfigureServices(IServiceCollection services) методе:

```

services.AddCors(setupAction =>
  setupAction.AddPolicy("MyPolicy",
                    builder => builder
                    .AllowAnyOrigin()
                    .AllowAnyMethod()
                    .AllowAnyHeader()
                    .AllowCredentials()))

```

И в методе конфигурации у меня есть следующий фрагмент кода:

```

 app.UseCors("MyPolicy")

```

Код клиентского приложения angular запускает соединение, как в следующем фрагменте кода:

```

this._connection = this._connection || new HubConnectionBuilder()
        .withUrl('https://localhost:44314/xyz/test?abc=123', options)
        .build();

```

Как я уже сказал, эта установка всегда работала нормально. Я обновил основное приложение .net (сервер signalR) с 2.1 до 2.2 (dotnetcore SDK версии 2.2.101) и обновил клиентский пакет signalR до 1.1.0. Сервер signalR обслуживает приложение angular и другое приложение C #. Приложение C # отлично подключается к серверу signalR и делает все, что должно, но приложение angular выдает следующее сообщение об ошибке:

Доступ к XMLHttpRequest по адресу 'https://localhost:44314/xyz/test/negotiate?abc=123 'from origin' https://localhost:44303 'заблокирован политикой CORS: ответ Предварительный запрос не проходит проверку контроля доступа: значение заголовка 'Access-Control-Allow-Origin' в ответе не должно быть подстановочным знаком '*', если режим учетных данных запроса - 'include'. Режим учетных данных запросов, инициированных XMLHttpRequest, контролируется атрибутом withCredentials.

Версия клиента signalR - 1.1.0 как в приложении angular, так и в клиентском приложении C #.

Какие-либо причины, по которым такое обновление до .net core 2.2 вызывает этот сбой связи, и какое возможное решение ?!


person Arash    schedule 31.12.2018    source источник


Ответы (2)


Как видите, браузер четко объясняет, что не так. Вы не можете использовать allowAnyOrigin (это Access-Control-Allow-Origin: * в ответ с allowCredentials). Либо сузьте доступ к источнику, либо удалите разрешение на учетные данные.

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

Любые причины, по которым такое обновление до .net core 2.2 вызывает этот сбой связи

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

person Antoniossss    schedule 31.12.2018
comment
Я удалил учетные данные, но это не помогло. - person Arash; 31.12.2018
comment
Клиент отправляет учетные данные? Если это так, он не будет проходить с исходным кодом с подстановочными знаками. Вам нужно будет сравнить ответ OPTIONS с теми, которые у вас были до обновления, чтобы увидеть, что на самом деле изменилось, поскольку вы косвенно заявляете, что приложение FE не изменилось. - person Antoniossss; 31.12.2018
comment
Mozilla ясно говорит - Ты не пройдешь !! developer.mozilla.org/en-US/docs/ Интернет / HTTP / CORS / Ошибки / - person Antoniossss; 31.12.2018

Есть два решения этой проблемы, из которых можно выбрать любое:

Решение 1. Либо укажите источник CORS явно. Решение 2. Или напишите промежуточное ПО для создания ожидаемых заголовков.

Дополнительную информацию можно найти здесь:

https://github.com/aspnet/AspNetCore/issues/4457

person Arash    schedule 31.12.2018