Вызов SignalR Core из консольного клиента с ошибкой авторизации JWT - PullRequest
0 голосов
/ 28 мая 2020

У меня есть консольный клиент. net, вызывающий мой концентратор SignalR. Хаб работает как веб-API, и мне нужно добавить к нему авторизацию. Итак, мой клиент вызывает IdentityServer и добавляет AccessTokenProvider следующим образом:

 var connection = new HubConnectionBuilder()
            .WithUrl("http://localhost:53965/Notify", options =>
            {
                options.AccessTokenProvider = () => Task.FromResult(tokenResponse.AccessToken);
            }
            )
            .Build();

В настройке концентратора на сервере у меня есть этот код, который я использовал, следуя документам Microsoft:

 services.AddControllers();
        services.AddAuthentication("Bearer")
            .AddJwtBearer("Bearer", options =>
            {
                options.Authority = "http://localhost:5000";
                options.RequireHttpsMetadata = false;

                options.Audience = "notification";
                options.Events = new JwtBearerEvents
                {
                    OnMessageReceived = context =>
                    {
                        var accessToken = context.Request.Query["access_token"];

                        var path = context.HttpContext.Request.Path;
                        if (!string.IsNullOrEmpty(accessToken) &&
                            (path.StartsWithSegments("/Notify")))
                        {
                            context.Token = accessToken;
                        }
                        return Task.CompletedTask;
                    }
                };

            });

Наконец, я сопоставляю свои конечные точки в configure при запуске следующим образом:

 app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllers();

            endpoints.MapHub<NotificationHub>("/Notify"); 
        });

Когда я просматриваю свой код для консольного клиента и попадаю в JwtBearderEvents OnMessageReceived, путь показывает «/ Notify /gotiate» затем выдает ошибку «Код состояния ответа не указывает на успех: 401 (неавторизованный) и останавливается как для консоли, так и для веб-приложения. Когда я останавливаюсь в JwtBearerEvents, он не показывает accessToken от клиента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...