Идентификатор аутентификации SignalR всегда имеет значение null

У меня есть приложение WPF, которое я подключаю к SignalR API. Тем не менее, у меня есть некоторые проблемы с моей личностью. Когда я действительно вызываю конечную точку API GET, POST, PUT или DELETE, Identity заполняется правильно (есть все утверждения). Когда я подключаюсь к SignalR, утверждений об идентичности нет.

Здесь я регистрирую свой токен Jwt

      services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
        .AddJwtBearer(options => {
            options.TokenValidationParameters = new TokenValidationParameters {
                ValidateIssuer = true,
                ValidateAudience = true,
                ValidateLifetime = true,
                ValidateIssuerSigningKey = true,
                ValidIssuer = configuration["Jwt:Issuer"],
                ValidAudience = configuration["Jwt:Audience"],
                IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(configuration["Jwt:Key"]))
            };
            options.Authority = configuration["Jwt:Authority"];
            options.RequireHttpsMetadata = false;
            options.SaveToken = true;
            options.Events = new JwtBearerEvents()
            {
                
                OnMessageReceived = context =>
                {
                    var accessToken = context.Request.Query["access_token"];
                    // If the request is for our hub...
                    var path = context.HttpContext.Request.Path;
                    if (!string.IsNullOrEmpty(accessToken) &&
                        (path.StartsWithSegments("/hubs")))
                    {
                        // Read the token out of the query string
                        context.Token = accessToken;
                    }

                    return Task.CompletedTask;
                },
            };
    });

и здесь я регистрирую свое соединение

        _connection = new HubConnectionBuilder()
        .ConfigureLogging(logBuilder =>
        {
            logBuilder.AddConsole();
            logBuilder.AddDebug();
        })
        .WithUrl($"{url}/hubs", options =>
        {
            options.AccessTokenProvider = _userService.GetToken;//returns Task.FromResult(userToken)
        })
        .WithAutomaticReconnect(new[]
        {
            TimeSpan.Zero,
            TimeSpan.FromSeconds(2),
            TimeSpan.FromSeconds(10),
            TimeSpan.FromSeconds(30),
            TimeSpan.FromSeconds(60),
            TimeSpan.FromSeconds(120)
        })
        .Build();

Мой объект Jwt в конфигурации

      "jwt":{
    "Key":"some random generated key",
    "Issuer":"https://localhost:5001/",
    "Audience":"https://localhost:5001/",
    "Authority":"https://localhost:5001/"
  },

Можете ли вы объяснить, что я делаю неправильно здесь?

1 ответ

Я действительно нашел ответ на свой вопрос.

Я изменился

      services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)

к

      services.AddAuthentication(x =>
            {
                x.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                x.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
            });

и это сделало это! Надеюсь, это поможет кому-то еще.

Другие вопросы по тегам