Configuración de autenticación de ServiceStack ServerEvents
Estoy tratando de usar la autenticación JWT con ServiceStack ServerEvents para asegurar que todos los usuarios estén autenticados, pero no puedo encontrar cómo configurar los eventos del servidor para hacer esto. Supongo que esto funciona en la configuración predeterminada, ya que no se menciona en los documentos cómo hacerlo funcionar, solo que lo hace, lo que significaría que algo en mi configuración ha deshabilitado / roto esta función, pero no puedo resolver qué.
En el lado del servidor, la configuración en Configure () es bastante simple.
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,
}
);
los proveedores jwt y perpetualJwt son JsonWebTokeynAuthProviders (manejan token de portador jwt) y tengo estos trabajando con solicitudes de API de stack de servicios estándar, así que tengo confianza en que su función es correcta, sin embargo, es posible que no se les llame.
Para conectar al cliente, uso un código como este:
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();
Cuando llamo al inicio, obtengo un 401. Si no necesito autenticación u omito el cliente serverevents, directBoardClient puede hacer llamadas que requieran autenticación con éxito.
Creo que la función de autenticación no se llama cuando me estoy conectando al punto final de la transmisión y que mi movimiento de los puntos finales de eventos puede haber alterado algo, pero no puedo identificar qué es eso. ¿Alguien puede ayudar a identificar lo que puedo hacer para solucionar esto o sugerir pasos de depuración adicionales?