У меня есть клиент WPF, который успешно подключается к концентратору, но я не могу передать пользователя клиента на концентратор.
Мой connection.User?.Identity?.Name
в моем классе, реализующий из IUserIdProvider
, возвращает null .
Для моего клиента WPF я использую это для подключения к хабу:
_connection = new HubConnectionBuilder()
.WithUrl(viewModel.Endpoint, opts =>
{
opts.Credentials = new NetworkCredential("user", "password", "domain");
opts.UseDefaultCredentials = true;
})
.Build();
Тогда у меня зарегистрирован следующий провайдер как синглтон:
public class NameUserIdProvider : IUserIdProvider
{
public string GetUserId(HubConnectionContext connection)
{
return connection.User?.Identity?.Name;
}
}
Как я упоминал выше, connection.User?.Identity?.Name;
возвращает ноль.
Я не знаю, что еще я могу сделать, чтобы передать имя пользователя из моего клиента (WPF) в мой концентратор.
Кстати, мой Startup.cs
выглядит так:
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
services.AddLogging();
services.AddSingleton<IUserIdProvider, NameUserIdProvider>();
services.AddSignalR(hubOptions =>
{
hubOptions.EnableDetailedErrors = true;
});
services.AddScoped<IBuildsService, BuildsService>();
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseHttpsRedirection();
app.UseRouting();
app.UseAuthentication();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
endpoints.MapHub<SyncCodeHub>("/signalr");
});
}
Любая помощь будет высоко ценится.
РЕДАКТИРОВАТЬ:
Я обновляю код с помощью:
services.AddAuthentication(IISDefaults.AuthenticationScheme);
Но проблема не устранена, идентификационный пользователь (IUserIdProvider) возвращает ноль при вызове из клиента WPF. Я запускаю API локально с IIS Express.
РЕДАКТИРОВАТЬ:
Из документов Microsoft:
Windows Аутентификация поддерживается только клиентом браузера при использовании Microsoft Inte rnet Explorer или Microsoft Edge.
Так что мне интересно, возможно ли это даже с рабочим столом в качестве клиента. Я предполагаю, что это должно работать, поэтому мне интересно, если я все еще пропускаю точку или это ошибка, связанная с версией SignalR I # m, использующей (3.1.3)