Ala*_*nut 5 self-hosting signalr signalr-hub owin
我有一个SignalR应用程序.托管在Windows服务中(使用OWIN和Katana作为自托管)并且正在mydomain.com上听取:8080
在同一台服务器上,我还有一个MVC应用程序,它基本上是一个连接到我上面提到的SignalR集线器的网站.
我想限制只对我的MVC应用程序访问我的SignalR应用程序.我搜索过互联网,但没有举例说明这一点.
是否有可能实现这一目标?如何获取有关连接是来自我的MVC应用程序还是来自其他应用程序的信息?我是否需要为自己的MVC应用程序实现授权才能连接到我的SignalR应用程序?
现在,互联网上的每个人都可以访问mydomain.com:8080/signalr端点,这基本上意味着竞争对手可以编写连接到我的SignalR集线器并使用它的客户端.有哪些选项可以防止出现这种情况?
ps:请提供更多信息 - 如果您需要 - 而不是仅仅将帖子标记为"非建设性",因为我不知道这个问题如何被提出更具"建设性"
我相信我有一个工作的例子,它快速而且肮脏,但它应该完成这项工作,你应该能够扩展它以便更好地满足你的需求:
我创建了一个继承Microsoft.AspNet.SignalR.AuthorizeAttribute和覆盖AuthorizeHubConnection方法的类:
[AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = false)]
public class CustomAuthorize : AuthorizeAttribute
{
public override bool AuthorizeHubConnection(Microsoft.AspNet.SignalR.Hubs.HubDescriptor hubDescriptor, IRequest request)
{
string referer = request.Headers["Referer"];
string authority = new Uri(referer).Authority;
if (authority == "mydomain.com:8080")
{
return true;
}
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
它只是检查Referer头的主机/权限与硬编码的主机/权限,如果匹配则返回true.
然后你可以像这样使用它:
[CustomAuthorize]
public class ChatHub : Hub
{
//Hub code here...
}
Run Code Online (Sandbox Code Playgroud)
如果CustomAuthorize返回false,则请求将停在那里.集线器OnConnected()不会被触发.
| 归档时间: |
|
| 查看次数: |
1450 次 |
| 最近记录: |