Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Signalr singalR selfhost服务器中的身份验证和SSL中的web客户端_Signalr_Signalr.client - Fatal编程技术网

Signalr singalR selfhost服务器中的身份验证和SSL中的web客户端

Signalr singalR selfhost服务器中的身份验证和SSL中的web客户端,signalr,signalr.client,Signalr,Signalr.client,我有一个singalR自主机服务器,它在https上的控制台应用程序中托管我的singalR 我正在使用此软件包自行托管: 安装包Microsoft.Owin.Hosting-预安装 安装包Microsoft.Owin.Host.HttpListener-预安装 安装软件包Microsoft.AspNet.signal.Owin 我有一个由WebApi支持的web客户端,我可以从我的webclient连接到我的自托管singalR并发送消息,但是我现在想添加身份验证,这意味着只有登录的用户才

我有一个singalR自主机服务器,它在https上的控制台应用程序中托管我的singalR

我正在使用此软件包自行托管:

  • 安装包Microsoft.Owin.Hosting-预安装 安装包Microsoft.Owin.Host.HttpListener-预安装 安装软件包Microsoft.AspNet.signal.Owin
我有一个由WebApi支持的web客户端,我可以从我的webclient连接到我的自托管singalR并发送消息,但是我现在想添加身份验证,这意味着只有登录的用户才能将消息发送到我的自托管singalR服务器。 我在使用方法之前使用了[Authorize]属性

[Authorize]
public void Test(string test)
{
    Console.WriteLine(test);   
}
我通过表单身份验证完成了web客户端身份验证,但是在成功登录到webclient之后,当我调用singalR方法时,我收到了javascript错误

未捕获值不能为null。参数名称:用户


它告诉我,我的方法受到保护,但不知何故,我的用户没有被传递到我的自托管singalR服务器,这里缺少什么?

在过去几天的SignalR JabbR聊天中,我问了几次类似的问题,但没有得到任何答案。

当我准备在这里发布我的问题时,我发现了你的问题,并且。不幸的是,从几周前给出的答案来看,信号器本身似乎没有提供身份验证支持,因此这对于许多自托管应用程序来说是一个巨大的问题(我们打算将集成Windows身份验证与信号器一起使用…)

信号器1.0引入了对此的支持,你可以在电视上读到一些关于这方面的内容。问题是,由于它是如此的新,它的记录有点稀疏

我不确定您的应用程序目前正在发生什么,但您可以在堆栈溢出上找到类似的问题,这可能有助于您走上正确的道路:

基本上,您可以创建一个signer属性来实现IAuthorizeHubConnection和IAuthorizeHubMethodInvocation,然后装饰您想要授权的集线器/方法

public class HubAuthorizeAttribute : Attribute, IAuthorizeHubConnection, IAuthorizeHubMethodInvocation {

    public virtual bool AuthorizeHubConnection(HubDescriptor hubDescriptor, Microsoft.AspNet.SignalR.IRequest request) {

        IAuthorizationProvider authorizationProvider = DependencyResolver.Current.GetService<IAuthorizationProvider>();

        return authorizationProvider.IsAuthorizedController(hubDescriptor.Name);
    }    

    public virtual bool AuthorizeHubMethodInvocation(IHubIncomingInvokerContext hubIncomingInvokerContext) {

        IAuthorizationProvider authorizationProvider = DependencyResolver.Current.GetService<IAuthorizationProvider>();

        return authorizationProvider.IsAuthorizedAction(hubIncomingInvokerContext.MethodDescriptor.Hub.Name, hubIncomingInvokerContext.MethodDescriptor.Name);
    }
}
var globalAuthorizer = new HubAuthorizeAttribute ();
GlobalHost.HubPipeline.AddModule(new AuthorizeModule(globalAuthorizer, globalAuthorizer));