Saltar al contenido

Pasar token a través de HTTP Headers SignalR

Ten en cuenta que en la informática un problema casi siempere suele tener diversas resoluciones, de igual modo te compartimos lo más óptimo y eficiente.

No existe una forma sencilla de establecer encabezados HTTP para las solicitudes de SignalR mediante el cliente JS o .NET, pero puede agregar parámetros a la consulta. string que se enviará como parte de cada solicitud de SignalR:

Cliente JS

$.connection.hub.qs =  "token" : tokenValue ;
$.connection.hub.start().done(function()  /* ... */ );

Cliente .NET

var connection = new HubConnection("http://foo/",
                                   new Dictionary
                                   
                                        "token", tokenValue 
                                   );

Dentro de un Hub puede acceder al nombre de la comunidad a través del Contexto:

Context.QueryString["token"]

Puedes agregar a la consulta string al hacer conexiones persistentes también.

EDITAR: ahora es posible establecer encabezados en el cliente .NET SignalR como lo señalaron algunos de los comentaristas.

Configuración de encabezados en el cliente .NET

var connection = new HubConnection("http://foo/");
connection.Headers.Add("token", tokenValue);

Puede agregar encabezados en Connection o HubConnection usando el cliente .NET (como menciona @abnanda):

var connection = new Connection("http://signalr/");
connection.Headers.Add("custom-header", "value");

En el lado del servidor, puede recuperar el valor del encabezado de IRequest en, por ejemplo, OnConnected:

var header = request.Headers["custom-header"];

Sin embargo, todavía no he encontrado una manera de hacer esto con el cliente js (no hay encabezados ni addHeaders en el objeto $conexión).

He publicado una pregunta sobre eso en: http://forums.asp.net/t/1910020.aspx/1?Add+custom+HTTP+header+on+client+side+connect+call+SignalR+1+1 +1+

EDITAR: los encabezados no están expuestos ya que el cliente websocket (en el navegador) no lo admite (por lo que no sería posible implementarlo en todos los transportes). Vea la respuesta de David Fowlers en la publicación anterior.

Resolví esto agregando mi información al querystring, que está disponible en el IConnected.Connect() método.

En el cliente .NET pasas el querystring into your HubConnection:

var connection = new HubConnection("http://localhost:8080/", "myInfo=12345");

En el cliente JS, establece la propiedad qs antes de iniciar la conexión:

$.connection.hub.qs = "myInfo=12345";

Luego puede acceder a esta información en el servidor en el método Connect():

var myInfo = Context.QueryString["myInfo"];
Groups.Add(Context.ConnectionId, myInfo);

Te invitamos a añadir valor a nuestro contenido informacional cooperando tu experiencia en las observaciones.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags :

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *