API web / OWIN, SignalR y autorización

Estoy desarrollando un prototipo de una aplicación AngularJS, Web API, SignalR como un posible punto de partida para un nuevo proyecto en VS 2013.

En esta etapa, estoy usando el código enlatado que Visual Studio genera para cuentas de usuario individuales.

Hay una línea en el código StartUp.Auth.cs que se ve así.

app.UseOAuthBearerTokens(OAuthOptions);

Con esto en su lugar, puedo agregar el atributo [Autorizar] a los controladores y funciona bien.

Por cierto, con angular pude agregar un encabezado estándar que contiene el token en JavaScript de la siguiente manera.

$http.defaults.headers.common.Authorization = 'bearer ' + access_token;

Luego agregué SignalR al proyecto.
Es compatible con su propia versión del atributo [Autorizar], pero no hay forma de pasar encabezados personalizados cuando se usa SignalR.
Es una limitación en el lado del navegador.
La documentación decía que podía pasar el token como parte de la cadena de consulta.
Agregué ese código en el lado de JavaScript. Mi código SignalR ahora incluye esto.
Pasé el token como 'bearer_token'.

this.connection = $.hubConnection("/TestHub", { useDefaultPath: false, qs: "bearer_token=" + token });

Entonces mi problema fue cómo hacer que OWIN reconozca el token ahora que ya no estaba en el encabezado.
Después de varias búsquedas, terminé agregando código que movía el token de la cadena de consulta al encabezado.
Para mi prototipo, acabo de agregar un pequeño código sobre la línea original en StartUp.Auth.cs.

Entonces, ahora se veía así:

app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions()
{
    Provider = new OAuthBearerAuthenticationProvider()
    {
        OnRequestToken = context =>
        {
            if (context.Request.Path.Value.StartsWith("/TestHub"))
            {
                string bearerToken = context.Request.Query.Get("bearer_token");
                if (bearerToken != null)
                {
                    string[] authorization = new string[] { "bearer " + bearerToken };
                    context.Request.Headers.Add("Authorization", authorization);
                }
            }

            return Task.FromResult(context);
        }
    }
});


// Enable the application to use bearer tokens to authenticate users
app.UseOAuthBearerTokens(OAuthOptions);

El código anterior es aproximado, pero este es un prototipo, así que realmente solo quería ver si funcionaba.

Finalmente llegando a la pregunta: ¿Es este el patrón correcto para integrar la autorización de token de portador con SignalR y la tubería OWIN?
Parece que no pude encontrar mucha buena información sobre la forma correcta de hacer esto.

Respuestas a la pregunta(3)

Su respuesta a la pregunta