为了在NestJS中使用websocket手动实现身份验证过程,我使用的是NestJS网关,但在为websocket连接之前的握手过程中发送的“升级” http请求设置处理程序时遇到了麻烦。有没有办法在某个地方设置一个功能,使我能够捕获此请求,以便我可以尽快拒绝访问?
这将允许更快地停止该过程,并且如果http请求中没有有效的身份验证令牌,则无法打开套接字。 我发现我可以使用websocket实例的协议字段来验证套接字的使用(客户端只是在websocket连接上设置了第二个参数),但是我宁愿不必处理“坏的”套接字在连接和停止后立即关闭无论通过什么程序,都可以通过http进行初始握手。
答案 0 :(得分:0)
我看到的最好的例子是在这里:https://github.com/mauricekraus/nestjs-ws-wrapper
请注意,该示例有效,但该软件包似乎缺少package.json中的某些依赖项。
他正在通过JWT进行身份验证,但是我相信您可以足够轻松地采用这种方法。
根据说明:
如果未正确验证用户身份(在连接事件之前,但在升级时),则此项目尝试阻止建立Websocket连接。
在使用情况下
仅从基类(SocketGateway)继承,并且如果要对套接字进行身份验证,请创建一个init方法,并使用@SocketInit()装饰它,然后调用身份验证方法。
@SocketInit()
public initTest(request: IncomingMessage) {
return this.authenticate(request);
}