Для этого требуется, чтобы ваш JWT AuthProvider принимал токены JWT через QueryString, который можно включить в JWT AuthProvider ServiceStack с помощью:
аюсь использовать аутентификацию JWT с ServiceStack ServerEvents, чтобы гарантировать аутентификацию всех пользователей, но я не могу найти, как настроить события сервера для этого. Я предполагаю, что это работает в конфигурации по умолчанию, так как в документации не указано, как заставить это работать, только то, что это делает, что означало бы, что что-то в моей конфигурации отключило / сломало эту функцию, но я не могу понять, что именно.
На стороне сервера настройка в Configure () довольно проста.
this.Plugins.Add(
new AuthFeature(
() => { return new AuthenticatedSession(); },
new IAuthProvider[] { jwt, perpetualJwt }
)
{
IncludeAssignRoleServices = false,IncludeRegistrationService = false
}
);
this.Plugins.Add(
new ServerEventsFeature
{
StreamPath = ApiHost.EventSystemRoot +"-stream", // /request/event-stream
HeartbeatPath = ApiHost.EventSystemRoot + "-heartbeat",
UnRegisterPath = null,
SubscribersPath = null,
LimitToAuthenticatedUsers = true,
IdleTimeout = TimeSpan.FromSeconds(30),
HeartbeatInterval = TimeSpan.FromSeconds(20),
NotifyChannelOfSubscriptions = true,
}
);
провайдерами jwt и perpetualJwt являются JsonWebTokeynAuthProviders (обрабатывать токен на предъявителя jwt), и я получил их для работы со стандартными API-запросами servicetack, поэтому я уверен, что их функция верна, однако они могут не вызываться.
Для подключения клиента я использую такой код:
this.directBoardClient = new JsonServiceClient(this.boardUrlTextBox.Text)
{
BearerToken = this.boardTokenTextBox.Text
};
this.directBoardEvents = new ServerEventsClient(this.boardUrlTextBox.Text.AppendPath("ueib", "request"))
{
OnMessage = boardEvents_OnMessage,
OnCommand = boardEvents_OnCommand
};
this.directBoardEvents.ServiceClient=this.directBoardClient;
this.directBoardEvents.Start();
Когда я вызываю start, я получаю 401. Если мне не требуется авторизация или я опускаю клиента serverevents, directBoardClient может совершать вызовы, которые требуют успешной аутентификации.
Я думаю, что функция аутентификации не вызывается, когда я подключаюсь к конечной точке потока, и что мое перемещение конечных точек событий могло что-то беспокоить, но я не могу определить, что это такое. Может кто-нибудь помочь определить, что я могу сделать, чтобы исправить это или предложить дальнейшие шаги отладки?