【发布时间】:2021-08-31 00:12:46
【问题描述】:
我有一个 HTML 应用程序。
某些页面必须运行 websockets 才能连接到运行 Asp.Net 应用程序的服务器并通过 Websocket 发送/接收一些消息。
websockets 服务器工作正常。但是任何人都可以向服务器发送一些请求。我希望我的服务器受到保护并且只接收经过身份验证的请求。例如,从开发人员模式下的 Javascript 中,我可以对 Websocket 服务器运行请求...
到目前为止,我只接受来自我的域的请求,如下所示,但这还不够:
var webSocketOptions = new WebSocketOptions()
{
KeepAliveInterval = TimeSpan.FromSeconds(120),
};
webSocketOptions.AllowedOrigins.Add("https://example.com");
webSocketOptions.AllowedOrigins.Add("https://www.example.com");
app.UseWebSockets(webSocketOptions);
有什么方法可以验证 Websocket 请求吗?或者例如只允许合法用户向 WS 服务器发送请求?
谢谢。
【问题讨论】:
-
在协议级别,Web 套接字以 http 请求开始,然后协商以保持连接打开并将其用作套接字。在创建 Web 套接字之前,您应该能够首先验证 http 请求标头。使用您自己的中间件先运行,或者通过复制实现并对其进行调整 (github.com/dotnet/aspnetcore/blob/main/src/Middleware/…)
-
嗯,进一步挖掘细节,你的代码看起来像这个示例吗? github.com/dotnet/aspnetcore/blob/… 所以你在某个地方打电话给
.WebSockets.AcceptWebSocketAsync?然后,您可以完全控制当时验证请求。