Blazor托管应用中使用JWT进行SignalR授权时出错

时间:2020-03-04 05:39:02

标签: c# jwt signalr blazor asp.net-core-3.1

我使用以下类为客户端信号创建自定义.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();
    }

然后在我的blazor .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无法在wss:// localhost:5001 / signalr / clientHub?id = q1wR_w0DENOM2B5qaAg0bw建立与服务器的连接。

firefox console dialog image

firefox network dialog

但是在.net core 3.1控制台应用程序中使用lib时,一切正常,并建立了连接。

我认为问题与浏览器使用http / 2.0和http / 1.1而控制台应用程序仅使用http / 1.1有关。

有什么主意吗?

我的应用程序和配置的其他方面都可以,因为从服务器端应用程序的集线器类中删除[Authorize]时,建立了连接并正确运行了应用程序。

firefox network dialog in remove Authorize attribute from hub

有什么主意吗?

谢谢。

0 个答案:

没有答案