ASP.NET Core 2 SignalR客户端连接标头无效

时间:2018-01-26 15:23:27

标签: c# asp.net asp.net-core signalr

有一个SignalR中心作为asp.net core 2 web应用程序运行,当我尝试使用.net桌面应用程序连接到集线器时,我在下面的图片中给出了这个错误。

当客户端尝试连接到集线器(await _connection.StartAsync())时会发生这种情况。

在localhost上运行集线器和客户端时,它正在工作。

我在服务器上使用 Microsoft.AspNetCore.SignalR v1.0.0-alpha2-final 桌面客户端上的 Microsoft.AspNetCore.SignalR.Client v1.0.0-alpha2-final

enter image description here

从.NET destop app连接到HUB:

var url = $"http://REMOTE_IP/chat?JwtToken={token}";
_connection = new HubConnectionBuilder()
                 .WithUrl(url)
                 .WithConsoleLogger()
                 .Build();
await _connection.StartAsync(); // IT THROWS ERROR HERE

ASP.net core 2 web:

public void ConfigureServices(IServiceCollection services)
{
    ...
    services.AddSignalR();
    ...
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    try
    {
        ...
        app.UseJwtSignalRAuthentication();
        ...
        app.UseSignalR(route =>
        {
            route.MapHub<MyHub>("chat");
        });
    }
    catch (Exception e)
    {
        Console.WriteLine(e);
    }
}

身份验证令牌扩展:

public static void UseJwtSignalRAuthentication(this IApplicationBuilder app)
{
    app.Use(async (context, next) =>
    {
        if (string.IsNullOrWhiteSpace(context.Request.Headers["Authorization"]))
        {
            try
            {
                if (context.Request.QueryString.HasValue)
                {
                    var token = context.Request.QueryString.Value
                                               .Split('&')
                                               .SingleOrDefault(x => x.Contains("JwtToken"))?
                                               .Split('=').Last();
                    if (!string.IsNullOrWhiteSpace(token))
                        context.Request.Headers.Add("Authorization", new[] {$"Bearer {token}"});
                }
            }
            catch { }
        }
        await next.Invoke();
    });
}

0 个答案:

没有答案