onconnectedasync net hub dotnet aspnet asp authentication asp.net-core authorization signalr jwt

authentication - hub - Autenticación JWT en SignalR(.NET Core) sin pasar el token en Query String



signalr vs signalr core (1)

Estoy utilizando tokens de autenticación JWT en una aplicación ASP .NET Core Web API. Los tokens son generados por la API en sí, no por un tercero. Añadí SignalR con éxito a la pila, pero ahora necesito autenticar a los usuarios que intentan ejecutar los métodos del servidor (Hub). Alguien sugirió pasar el token en la propiedad "qs" en JavaScript. Esto no funcionará para mí ya que nuestros tokens son realmente grandes (contienen muchos reclamos). Traté de escribir un middleware personalizado para leer el token de la carga útil y autenticar automáticamente al usuario. El problema es que, al usar WebSockets, el middleware no se ejecuta. Cualquier idea te ayudará.


Eche un vistazo al artículo que sugiere utilizar la cadena de consulta Autenticar contra una aplicación SignalR de ASP.NET Core 1.0 (vNext) utilizando JWT . Sé que tu token es demasiado largo, pero el autor explica cómo usar el middleware para autenticar la solicitud.

Aquí está el resumen del artículo:

  • SignalR no tiene ningún mecanismo de autenticación especial integrado, está utilizando la autenticación ASP.NET estándar.
  • JWT generalmente se envía en el encabezado Autorización de una solicitud
  • La biblioteca del cliente SignalR JavaScript no incluye los medios para enviar encabezados en las solicitudes, pero le permite pasar una cadena de consulta
  • Si pasamos el token en la cadena de consulta, podemos escribir un middleware que agrega un encabezado de autorización con el token como su valor. Esto debe hacerse antes de que el middleware Jwt esté en proceso
  • Tenga en cuenta el formato "al portador"

He resaltado el punto clave de que su middleware personalizado debe registrarse antes del middleware Jwt.