SignalR 中的客户端 IP 列表和阻止
Client IP Listing and Blocking in SignalR
在Asp.net(核心).net 5 中,在 SignalR 端,我们如何列出(接收)客户端 IP 并通过 IP 阻止或允许某些 IP 的连接和请求?
在我的研究中,我看到只提到了 Azure SingalR。
我们如何通过在应用程序中编码来告诉 SignalR Hub 请求客户端 IP 并接受(白名单)或阻止(黑名单)public 来自特定 IP 的连接请求?
可能吗?
在 SignalR 中,您可以使用 HttpContext 获取用户的 ip。
public class AppHub : Hub
{
public string Ip => Context.GetHttpContext().Connection.RemoteIpAddress.ToString();
public override async Task OnConnectedAsync()
{
if (Ip == "::1")
{
await Clients.All.SendAsync("ReceiveMessage", "Server", "Welcome to the server!");
}
else
{
throw new Exception("You are not allowed to connect to this server!");
}
await base.OnConnectedAsync();
}
}
另一个解决方案是创建一个集线器过滤器,您可以在此处找到文档:
https://docs.microsoft.com/en-us/aspnet/core/signalr/hub-filters?view=aspnetcore-6.0
在Asp.net(核心).net 5 中,在 SignalR 端,我们如何列出(接收)客户端 IP 并通过 IP 阻止或允许某些 IP 的连接和请求?
在我的研究中,我看到只提到了 Azure SingalR。
我们如何通过在应用程序中编码来告诉 SignalR Hub 请求客户端 IP 并接受(白名单)或阻止(黑名单)public 来自特定 IP 的连接请求?
可能吗?
在 SignalR 中,您可以使用 HttpContext 获取用户的 ip。
public class AppHub : Hub
{
public string Ip => Context.GetHttpContext().Connection.RemoteIpAddress.ToString();
public override async Task OnConnectedAsync()
{
if (Ip == "::1")
{
await Clients.All.SendAsync("ReceiveMessage", "Server", "Welcome to the server!");
}
else
{
throw new Exception("You are not allowed to connect to this server!");
}
await base.OnConnectedAsync();
}
}
另一个解决方案是创建一个集线器过滤器,您可以在此处找到文档: https://docs.microsoft.com/en-us/aspnet/core/signalr/hub-filters?view=aspnetcore-6.0