Signalr 如何限制信号服务器连接?

Signalr 如何限制信号服务器连接?,signalr,owin,signalr-hub,self-hosting,Signalr,Owin,Signalr Hub,Self Hosting,我有一个信号器应用程序。托管在Windows服务中(使用OWIN和Katana作为自托管),并在mydomain.com上侦听:8080 在同一台服务器上,我还有一个MVC应用程序,它基本上是一个连接到我上面提到的SignalR hub的网站 我想限制对我的信号器应用程序的访问仅限于我的MVC应用程序。我在网上搜索过,但没有找到这样的例子 有可能做到这一点吗?如何获取连接来自我的MVC应用程序还是其他应用程序的信息?我是否需要为自己的MVC应用程序实现授权才能连接到我的Signal应用程序 现在

我有一个信号器应用程序。托管在Windows服务中(使用OWIN和Katana作为自托管),并在mydomain.com上侦听:8080

在同一台服务器上,我还有一个MVC应用程序,它基本上是一个连接到我上面提到的SignalR hub的网站

我想限制对我的信号器应用程序的访问仅限于我的MVC应用程序。我在网上搜索过,但没有找到这样的例子

有可能做到这一点吗?如何获取连接来自我的MVC应用程序还是其他应用程序的信息?我是否需要为自己的MVC应用程序实现授权才能连接到我的Signal应用程序

现在,互联网上的每个人都可以访问mydomain.com:8080/signarendpoint,这基本上意味着竞争对手可以编写一个连接到我的signarhub的客户端并使用它。有哪些选项可以防止这种情况


p、 s:如果你需要,请询问更多信息,而不是仅仅将帖子标记为“非建设性”,因为我不知道这个问题如何才能被问得更“建设性”

我相信我有一个有效的例子,它既快又脏,但它应该起作用,你应该能够扩展它,使它更适合你的需要:

我创建了一个类,该类继承自
Microsoft.AspNet.signal.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;
    }
}
它所做的只是对照硬编码的主机/权限检查Referer头,如果匹配,则返回true

然后您可以这样使用它:

[CustomAuthorize]
public class ChatHub : Hub
{
    //Hub code here...
}

如果
CustomAuthorize
返回false,则请求将在此停止。集线器的
OnConnected()
不会被触发。

只需使用cors选项,而不是编写代码。在cors中,只允许您的域。

太棒了,我一回到家就会尝试。一个简单的问题是:对于每个访问该网站的客户,主机是否总是mydomain.com:8080?我猜mvc应用程序在连接到SignalR时会传递客户端的主机地址,对吗?我认为Tobias的答案也是正确的,但这是更好的方法