SignalR 2.0中的授权标题

时间:2013-12-18 07:11:54

标签: authentication asp.net-web-api signalr

我正在为我的api控制器使用基于WebApi和令牌的身份验证。(授权:bearer xyzabc ..)我现在有一个signalR集线器,并希望通过客户端上的相同令牌对客户端进行身份验证。

我该怎么做?这个link显示了如何通过url参数发送令牌,但我不确定如何使用该令牌并在服务器端验证用户。

3 个答案:

答案 0 :(得分:2)

我通过将令牌作为我的Hub方法的参数而不是标头来解决这个问题。但我想也可以使用标题来做它(只是从Context.Headers或其他东西中提取令牌)。

无论哪种方式,在hub方法中获取令牌后,只需使用此代码即可。

    public Task SendMessage(string message, string token)
    {
        var ticket = Startup.OAuthOptions.AccessTokenFormat.Unprotect(token);
        bool isAuth = ticket.Identity.IsAuthenticated;
       //You can retrieve other details like username and userid from ticket
       ...rest of your code..
    }

答案 1 :(得分:0)

我不会每次都发送令牌。我将在OnConnected虚拟方法上建立您的上下文用户主体,并从标记传递的查询字符串中读取。

就我而言。我刚刚创建了一个从Hub类继承的抽象类,然后在那里填充了我的oauth声明生成逻辑。然后我的常规混凝土集线器继承自我的基础自定义集线器类。

另一种选择是使用自定义授权属性或其他集线器管道模块。

我认为这些策略可能会使您的代码保持干燥和可扩展。

答案 2 :(得分:0)

我发现当你从Web API调用JQuery之类的默认/ Token处理程序时,浏览器也会发送一个cookie,用于通过SignalR验证你。

只要您使用浏览器中的有效凭据调用/ Token,您就应该能够使用SignalR集线器方法中的[Authorize]属性以及“Context.User.Identity”来获取当前用户在连接到集线器之前。