Как установить интегрированную проверку подлинности Windows в SignalR для некоторых, но не для всех концентраторов

#c# #signalr #windows-authentication

#c# #signalr #windows-аутентификация

Вопрос:

Мне нужно использовать проверку подлинности Windows для концентратора, но поскольку я работаю в более крупной системе, я могу получить доступ к конвейеру SignalR только через GlobalHost.

Я пытался использовать AuthorizedAttribute , но это не устанавливает идентификатор, поскольку не зарегистрирован модуль авторизации.

Я пробовал настраивать GlobalHost.HubPipeline.RequireAuthentication();

Это устанавливает идентификатор, но поскольку он устанавливает авторизацию глобально, другие концентраторы не могут подключаться.

Наконец, я попытался добавить пользовательский модуль авторизации, который должен применяться только к одному нужному мне концентратору. Но как только я делаю исключение для одного концентратора, идентификатор снова не устанавливается, и я получаю неавторизованный ответ от авторизованного концентратора.

Ответ №1:

Обычно я помещаю атрибут аутентификации поверх своего класса hub.

  [Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
 public class myChat : Hub 
 {
 }
  

это проверка подлинности на основе токенов, и вам необходимо настроить отправку токена аутентификации с клиента.
https://learn.microsoft.com/en-us/aspnet/core/signalr/authn-and-authz?view=aspnetcore-3.1