gpt4 book ai didi

signalr - 如何限制SignalR服务器连接?

转载 作者:行者123 更新时间:2023-12-02 13:50:31 26 4
gpt4 key购买 nike

我有一个 SignalR 应用程序。托管在 Windows 服务中(使用 OWIN 和 Katana 作为自托管),并且正在监听 mydomain.com:8080

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

我想将对我的 SignalR 应用程序的访问限制为仅我的 MVC 应用程序。我在互联网上搜索过,但没有找到这样的例子。

有可能实现这个目标吗?如何获取有关连接是来 self 的 MVC 应用程序还是来自其他应用程序的信息?我是否需要为自己的 MVC 应用程序实现授权才能连接到我的 SignalR 应用程序?

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

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

最佳答案

我相信我有一个有效的示例,它又快又脏,但它应该可以完成工作,并且您应该能够扩展它,以便它更好地满足您的需求:

我创建了一个继承自 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;
}
}

它所做的只是根据硬编码的主机/权限检查 Referer header 的主机/权限,如果匹配则返回 true。

然后您可以像这样使用它:

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

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

关于signalr - 如何限制SignalR服务器连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23377095/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com