信号承载令牌认证

时间:2016-02-18 13:39:38

标签: c# asp.net authentication signalr asp.net-identity

您好我正在尝试使用承载身份验证设置信号器。当我调试Requesttoken方法时,成功接收到承载令牌。但是当我的信号器客户端使用持有者令牌调用受保护(授权)方法时,他没有经过身份验证。我还尝试实现自定义AuthorizeAttribute,但AccessTokenFormat.Unprotect总是返回null。

错误讯息:

Caller is not authorized to invoke the Send method on Hub. 

设定:

  • Web Api项目
    -Web Api项目中的信号中心 - 信号器的启动配置

Signalr Startup Config:

app.Map("/signalr", map =>
{
    map.UseCors(CorsOptions.AllowAll);
    map.UseOAuthAuthorizationServer(OAuthOptions);
    map.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions()
    {
        Provider = new SignalrOAuthProvider()
    });

    var configuration = new HubConfiguration(){
        EnableDetailedErrors = true
    };

    map.RunSignalR(configuration);
});

自定义OAuthprovider,它从cookie或查询字符串中读取持有者令牌

public class SignalrOAuthProvider : OAuthBearerAuthenticationProvider
{
    public override Task RequestToken(OAuthRequestTokenContext context)
    {
        // var value = context.Request.Query.Get("bearer");
        var value = context.OwinContext.Request.Cookies["BearerToken"];
        if (!string.IsNullOrEmpty(value))
        {
            context.Token = value;
         }

         return Task.FromResult(null);
     }
}

1 个答案:

答案 0 :(得分:0)

确保在集线器上使用[System.Web.Http.Authorize]属性。然后在标题中传递Bearer令牌。

授权:承载“您的令牌”