Ошибка CORS клиента SignalR при использовании аутентификации Windows - PullRequest
0 голосов
/ 17 февраля 2020

Я использую Windows аутентификацию на серверном приложении ASP. NET Core 2.2, и все работает нормально, кроме SignalR в Angular 8 приложении. Я получаю следующую ошибку:

Доступ к XMLHttpRequest по адресу http://localhost: 2110 / api / aircrafts / hub /gotiate 'from origin' http://localhost: 2302 'заблокировано политикой CORS: Ответ на запрос предварительной проверки не проходит проверку контроля доступа: в запрошенном ресурсе отсутствует заголовок «Access-Control-Allow-Origin».

localhost: 2302 - это клиентская часть, работающая Angular 8 с @ aspnet / signalr@1.1.4 и localhost: 2110 это серверная часть. Вот мой код сервера:

Startup.cs Метод настройки

app.UseCors("CORS");
app.UseAuthentication();
var relativeUri = webSettings.SignalRAircraftsUri.ToString();
app.UseSignalR(hubs => { hubs.MapHub<AircraftsHub>(relativeUri); });

Startup.cs Метод ConfigureServices

services.AddCors(options =>
        {
            options.AddPolicy("CORS", builder =>
            {
                builder
                    .AllowAnyMethod()
                    .AllowAnyHeader()
                    .WithOrigins(webSettings.AllowedHosts.ToArray())
                    .AllowCredentials();
            });
        });

        services.AddSignalR();
        services.AddAuthentication(IISDefaults.AuthenticationScheme);

webSettings.AllowedHosts содержит localhost: 2302 .

launchsettings. json:

  "iisSettings": {
    "windowsAuthentication": true,
    "anonymousAuthentication": false,
    "iisExpress": {
      "applicationUrl": "http://localhost:2110",
      "sslPort": 0
    }
  },

И это Angular код:

const signalRConnection = new signalR.HubConnectionBuilder().withUrl(url).build();
signalRConnection.start();

, где url равен localhost: 2110 / API / aircraft / hub

Любая помощь будет с благодарностью.

1 Ответ

2 голосов
/ 18 февраля 2020

Прежде всего, вам не следует использовать пакет @aspnet/signalr@1.1.4, поскольку он заброшен и перенесен Microsoft в пакет @microsoft/signalr, и он уже находится на версии 3.1.0, как вы можете видеть в этой документации .

О CORS вы должны настроить свой CORS следующим образом:

services.AddCors(options =>
{
    options.AddPolicy(CorsPolicy, builder => builder.WithOrigins(webSettings.AllowedHosts.ToArray())
        .AllowAnyHeader()
        .AllowAnyMethod()
        .AllowCredentials()
        .SetIsOriginAllowed((host) => true));
});
...