Как правильно настроить CORS с ASP.NET Core и Aurelia (с http-fetch-client) с включенной аутентификацией Windows? - PullRequest
0 голосов
/ 12 ноября 2018

Выполнение запроса CORS с ASP.NET Core и Aurelia http-fetch-client работает неправильно, если включена аутентификация Windows (NTLM). Установка выглядит следующим образом:

Статические файлы размещены на http://localhost:50927/

API размещен на http://localhost:50928/

Клиент Aurelia HTTP fetch настроен на использование порта API:

this.client = new HttpClient();
this.client.configure((config: any) => {
    config.withBaseUrl('http://localhost:50928/api/')
}

Сервер ASP.NET Core API настроен для использования CORS в Startup.cs

app.UseCors(builder => builder
    .AllowAnyOrigin()
    .AllowAnyMethod()
    .AllowAnyHeader()
    .AllowCredentials());

Однако, когда включена проверка подлинности Windows, запросы к API не выполняются, и в консоли веб-браузера отображается следующее

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the  remote resource at http://localhost:50928/api/sifiri/get-all-reports. (Reason: CORS header 'Access-Control-Allow-Origin' missing).[Learn More]

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

Редактировать: после отключения «Просто мой код» в консоли отображается соответствующее исключение:

Exception thrown: 'System.Net.Sockets.SocketException' in Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.dll
Exception thrown: 'System.Net.Sockets.SocketException' in System.Private.CoreLib.dll
Exception thrown: 'System.IO.IOException' in System.Net.Sockets.dll
Exception thrown: 'System.IO.IOException' in System.Private.CoreLib.dll
Exception thrown: 'System.Threading.Tasks.TaskCanceledException' in System.Net.Http.dll
Exception thrown: 'System.Threading.Tasks.TaskCanceledException' in System.Private.CoreLib.dll
Exception thrown: 'System.ObjectDisposedException' in System.Net.Sockets.dll
Exception thrown: 'System.ObjectDisposedException' in System.Private.CoreLib.dll
Exception thrown: 'System.ObjectDisposedException' in System.Private.CoreLib.dll

Больше информации не предоставляется

1 Ответ

0 голосов
/ 13 ноября 2018

Вам просто нужно включить credentials и mode, когда вы делаете вызов fetch. Это должно выглядеть примерно так:

this.client
    .fetch(apiUrl, {
        mode: "cors",
        credentials: "include",
        ...
    })

При этом вы в основном просите браузер включить учетные данные пользователя в запрос на выборку. И этого должно быть достаточно, если вы сконфигурировали CORS на сервисе для включения источника / заголовка / метода клиента и т. Д.

Надеюсь, это поможет.

...