JWT не получает от клиента к серверу SignalR - PullRequest
0 голосов
/ 10 апреля 2020

У меня есть базовый c ASP. NET Сервер Core 3.0 SignalR с клиентом Blazor WebAssembly, я пытаюсь настроить аутентификацию, и я столкнулся с проблемой - токеном, который я отправил от клиента похоже, что он не попадает на сервер, вот код, который я использовал для отправки токена (стандартное консольное приложение для тестирования, но код тот же на клиенте).

_hubConnection = new HubConnectionBuilder()
            .WithUrl("https://localhost:5001/chat", options =>
            {
                options.AccessTokenProvider = () => Task.FromResult("TotallySecureToken");
            })
            .Build();

И это моя установка на другой стороне

public void ConfigureServices(IServiceCollection services)
    {
        services.AddAuthentication(options =>
        {
            options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
            options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
        })
            .AddJwtBearer(options =>
            {
                options.Events = new JwtBearerEvents
                {
                    OnMessageReceived = context =>
                    {
                        var accessToken = context.Request.Query["access_token"];
                        //accessToken is just {} when I check the debugger
                        Console.WriteLine(accessToken);
                        if (accessToken == "TotallySecureToken")
                        {
                            context.Token = accessToken;
                        }
                        return Task.CompletedTask;
                    }

                };
            });
        services.AddCors();
        services.AddSignalR();
    }

Эта установка, которую я взял из документации Microsoft, и никаких дополнительных настроек там не происходит, вот ссылка на эту документацию. Вот мой конфиг

 public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        app.UseRouting();

        app.UseCors(builder => builder.AllowAnyOrigin().AllowAnyHeader().AllowAnyMethod());

        app.UseAuthentication();
        app.UseAuthorization();

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapHub<Chat>("/chat");
        }); 
    }

Я подозреваю, что это как-то связано с CORS, но я пробовал несколько установок, и ни одна из них, похоже, не дает никакого эффекта, токен пуст каждый раз. Есть предложения?

...