Для этого требуется, чтобы ваш 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 может совершать вызовы, которые требуют успешной аутентификации.

Я думаю, что функция аутентификации не вызывается, когда я подключаюсь к конечной точке потока, и что мое перемещение конечных точек событий могло что-то беспокоить, но я не могу определить, что это такое. Может кто-нибудь помочь определить, что я могу сделать, чтобы исправить это или предложить дальнейшие шаги отладки?

Ответы на вопрос(1)

Ваш ответ на вопрос