Невозможно аутентифицировать чат-центр SignalRC#

Место общения программистов C#
Anonymous
Невозможно аутентифицировать чат-центр SignalR

Сообщение Anonymous »

Я пишу приложение для чата в реальном времени с использованием веб-API ASP.NET Core 8, SignalR и Angular. Я использую новую систему аутентификации, представленную в .NET 8, с аутентификацией по токену.
Я реализовал аутентификацию из интерфейса Angular, и она работает правильно, и я получаю доступ к авторизованным методам.
Но когда я пытаюсь аутентифицировать свой чат-центр, он не распознает его как аутентифицированного пользователя.
Кроме того, Context.User?.Identity?.IsAuthenticated отображается как "ЛОЖЬ". Но функция onConnectedAsync оформлена как авторизация и работает.
Это в моем конструкторе службы чата, где я строю соединение:
this.hubConnection = new signalR.HubConnectionBuilder()
.withUrl(`${this.baseUrl}/chathub`, {
accessTokenFactory: () => this.authService.getToken()
})
.build();

Я проверил вкладку «Сеть». Токен доступа отправляется вместе с запросом.
Это мой чат-центр:
[Authorize]
public override async Task OnConnectedAsync()
{
var userId = Context.UserIdentifier; // Get user ID from authentication
await Clients.All.SendAsync("ReceiveSystemMessage", $"{userId} joined.");
await base.OnConnectedAsync();
}

[Authorize]
public override async Task OnDisconnectedAsync(Exception exception)
{
var userId = Context.UserIdentifier; // Get user ID from authentication
await Clients.All.SendAsync("ReceiveSystemMessage", $"{userId} left.");
await base.OnDisconnectedAsync(exception);
}

Он успешно подключается и отправляет сообщения. Но в системном сообщении отображается только «присоединился» без идентификатора.
Это файл program.cs:
// Add Authentication
builder.Services.AddAuthentication().AddBearerToken(IdentityConstants.BearerScheme);
builder.Services.AddAuthorizationBuilder();
builder.Services.AddIdentityCore()
.AddEntityFrameworkStores()
.AddApiEndpoints();

var app = builder.Build();

app.UseCors();

// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}

app.UseHttpsRedirection();

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

app.MapIdentityApi();

app.MapControllers();

app.MapHub("/chathub");

app.Run();


Подробнее здесь: https://stackoverflow.com/questions/787 ... r-chat-hub

Вернуться в «C#»