Signalr singalR selfhost服务器中的身份验证和SSL中的web客户端
我有一个singalR自主机服务器,它在https上的控制台应用程序中托管我的singalR 我正在使用此软件包自行托管: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并发送消息,但是我现在想添加身份验证,这意味着只有登录的用户才
- 安装包Microsoft.Owin.Hosting-预安装 安装包Microsoft.Owin.Host.HttpListener-预安装 安装软件包Microsoft.AspNet.signal.Owin
[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));