SignalR в ASP.Net Core 401 не авторизован - PullRequest
0 голосов
/ 24 декабря 2018

У меня небольшая проблема с моим приложением UWP.Во-первых, приложение UWP имеет следующие возможности:

  • Аутентификация предприятия
  • Общие пользовательские сертификаты
  • Частные сети
  • Информация об учетной записи пользователя

Теперь я хочу подключиться к SignalR-Hub в веб-API ASP.NET Core 2.1.Концентратор выглядит так:

using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.SignalR;

namespace Test.Namespace
{
    [Authorize]
    public class SyncHub : Hub
    {
        public void SendUpdate()
        {
            Clients.All.SendAsync("Update");
        }
    }
}

А это мой Startup.cs:

using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.SignalR;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;

namespace Test.Namespace
{
    public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }

        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {

            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

            services.AddSignalR();
            services.AddSingleton<IUserIdProvider, NameUserIdProvider>();
        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseHsts();
            }

            app.UseHttpsRedirection();

            app.UseSignalR(routes =>
            {
                routes.MapHub<SyncHub>("/syncHub");
            });
            app.UseMvc();
        }
    }
}

Весь API работает на IIS с настроенной аутентификацией Windows.Active Directory работает на том же компьютере.

И вот как приложение UWP вызывает службу:

            HubConnection connection = new HubConnectionBuilder().WithUrl("http://Server:81/syncHub", options => {
                options.UseDefaultCredentials = true;
            }).Build();
            await connection.StartAsync();

Этот вызов всегда выдает 401.

Что я делаю не так?Я работаю над этой проблемой более недели и не могу понять, почему она не работает.

Спасибо всем, кто мне поможет:)

Редактировать : Итак, сегодня я попробовал несколько соображений и обнаружил, что это не проблема самого SignalR. Я создал консольное приложение ASP.NET Core с точно таким же вызовом, и все работает отлично.Это также работает, когда я жестко кодирую учетные данные в приложении UWP.Это не работает, только когда я использую «UseDefaultCredentials» в UWP.Я совершенно невежественен.Я перепроверил возможности, но это тоже не помогает.

Ответы [ 2 ]

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

Наконец-то!

Ответ было действительно трудно найти, но теперь он работает!Согласно этому сайту: https://support.microsoft.com/en-us/help/303650/intranet-site-is-identified-as-an-internet-site-when-you-use-an-fqdn-o

приложение идентифицирует звонок как звонок в Интернет и поэтому не позволяет отправлять учетные данные по умолчанию.Я должен добавить эту страницу вручную на локальные сайты Интранет с помощью Internet Explorer, и это сработало как чудо.

Спасибо всем, кто помог мне с этим:)

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

Кажется, app.UseHttpsRedirection(); не удалось перенаправить учетные данные клиента.

Попробуйте сделать тест с https url.

var hubConnectionBuilder = new HubConnectionBuilder();
var hubConnection = hubConnectionBuilder.WithUrl("https://localhost:44381/timeHub",options => {
    options.UseDefaultCredentials = true;
}).Build();
await hubConnection.StartAsync();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...