У меня есть два клиента для моего приложения SignalR: клиент Javascript для веб-браузеров и клиент Android ( Gurgen / SignalR-.net-core-android-client ), которые используют аутентификацию JWT Bearer.
Я добавил этот атрибут в мой SignalR Hub:
[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme + "," + CookieAuthenticationDefaults.AuthenticationScheme)]
public class MyHub : Hub
И мой Startup.cs файл:
public void ConfigureServices(IServiceCollection services)
{
//…
services.AddAuthentication()
.AddCookie(cfg => cfg.SlidingExpiration = true)
.AddJwtBearer(options =>
{
options.RequireHttpsMetadata = false;
options.SaveToken = true;
options.TokenValidationParameters = new TokenValidationParameters()
{
ValidIssuer = Configuration["Tokens:Issuer"],
ValidAudience = Configuration["Tokens:Issuer"],
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["Tokens:Key"]))
};
});
services.AddSignalR();
//…
Клиент Android успешно вошел в систему с носителем аутентификации заголовкамаркер. Но веб-клиенту не удалось подключиться к концентратору (401 не авторизован).
Когда я удаляю атрибут [Authorize], клиент javascript работает!
Что такое Javascript SignalR Client по умолчаниюAuthenticationScheme?Или в чем проблема, с которой я столкнулся?
Я использую dotnet core 2.1, Microsoft.AspNetCore.SignalR, а моей IDE является Visual Studio для Mac.