No se puede identificar el contexto del usuario en el centro SignalR decorado con el atributo "Autorizar"
Servidor
Hub SignalR dentro de MVC 5 WebApi 2, Seguridad: token de portador
Cliente
Clase C # que utiliza HttpWebRequest para recuperar el token de portador del controlador WebApi / punto final de token
Usé el patrón descritoaquí yaquí para entregar el token portador a mi subclase AuthorizeAttribute.
Cuando el código dentro del método AuthorizeHubConnection ejecuta el ticket entregado por la llamada a "secureDataFormat.Unprotect (token)" siempre es nulo. He confirmado que el token es idéntico en ambos extremos de la comunicación.
Aquí está el método de anulación:
public override bool AuthorizeHubConnection(AspNet.SignalR.Hubs.HubDescriptor hubDescriptor, IRequest request)
{
var dataProtectionProvider = new DpapiDataProtectionProvider();
var secureDataFormat = new TicketDataFormat(dataProtectionProvider.Create());
var token = request.QueryString.Get("Bearer");
var ticket = secureDataFormat.Unprotect(token);
if (ticket != null && ticket.Identity != null && ticket.Identity.IsAuthenticated)
{
// set the authenticated user principal into environment so that it can be used in the future
request.Environment["server.User"] = new ClaimsPrincipal(ticket.Identity);
return true;
}
return false;
}
Cuando ejecuto el concentrador sin el atributo autorizar y establezco un punto de interrupción dentro de la anulación "OnConnected", la propiedad Context.User también es nula.
Cualquier ayuda sería muy apreciada.
Rico