Ответ на предполетный запрос не проходит проверку контроля доступа в signalR - PullRequest
0 голосов
/ 31 декабря 2018

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

`` `

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

` ``

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

`` `

 app.UseCors("MyPolicy")

` ``

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

`` `

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

` ``

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

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

Версия клиента signalR - 1.1.0 для обоих приложений - angular и C #.

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

Ответы [ 2 ]

0 голосов
/ 31 декабря 2018

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

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

Дополнительная информация находится здесь:

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

0 голосов
/ 31 декабря 2018

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

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

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

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

...