Ошибка авторизации SignalR с JWT в Blazor Hosted App - PullRequest
0 голосов
/ 04 марта 2020

Я создаю пользовательскую. net стандартную библиотеку 2.1 для клиентского сигнализатора с таким классом, как этот:

 class OmsSignalRClient : IOmsSignalRClient
    {
        private HubConnection _hubConnection;
        public OmsSignalRClient(Uri baseUri, string token)
        {
            _hubConnection = new HubConnectionBuilder()
                .WithUrl(baseUri.ToAbsoluteUri("/signalr/clientHub").AbsoluteUri, option =>
                {
                    option.AccessTokenProvider = () => Task.FromResult(token);
                })
                .Build();

            _hubConnection.On<string>("SayHellow", date => OnTestData?.Invoke(this, new TestDataEventArgs(date)));
        }

        public event EventHandler<TestDataEventArgs> OnTestData;

        public async ValueTask DisposeAsync()
        {
            if (_hubConnection != null)
            {
                await _hubConnection.DisposeAsync().ConfigureAwait(false);
            }
        }

        public async Task StartAsync() => await _hubConnection.StartAsync();
    }

, затем в моем блейзоре. net core 3.1 Размещаемое приложение создает компонент и использует его следующим образом: это:

 protected override async Task OnInitializedAsync()
    {
 var loginData = new LoginData()
        {
            UserName = "admin",
            Password = "123@456#Pass"
        };
        Console.WriteLine("Start");
        _omsClient = (IOmsSignalRClient)await _omsClientFactory.OpenConnectionAsync(new Uri(_navigationManager.Uri), loginData).ConfigureAwait(false);
        _omsClient.OnTestData += (_, e) =>
        {
            _messageInput = e.Data;
            StateHasChanged();
        };
        await _omsClient.StartAsync().ConfigureAwait(false);
    }

в запущенном приложении я вижу эту ошибку:

Firefox не может установить sh соединение с сервером по адресу wss: // localhost: 5001 / signalr / clientHub? Id = q1wR_w0DENOM2B5qaAg0bw.

firefox консольное диалоговое изображение

firefox сетевое диалоговое окно

но при использовании lib in. net консольное приложение core 3.1 все в порядке и соединение установлено.

Я думаю, что проблема должна быть связана с тем, что браузер использует http / 2.0 и http / 1.1 но консольное приложение использует только http / 1.1.

любая идея?

другие стороны моего приложения и конфигурации в порядке, потому что при удалении [Authorize] из класса концентратора в серверной app.connection установлено и приложение работает правильно.

firefox сетевое диалоговое окно для удаления атрибута авторизации из концентратора

есть идеи?

Спасибо.

...