0

为了在 NestJS 中手动实现使用 websockets 的身份验证过程,我使用的是 NestJS 网关,但是在为 websocket 连接之前的握手期间发送的“升级”http 请求设置处理程序时遇到了麻烦。有没有办法在某处设置一个功能,使我能够捕获这个请求,以便我可以尽快拒绝访问?

这将允许更快地停止进程,并且如果 http 请求中没有有效的身份验证令牌,则无法打开任何套接字。我发现我可以使用 websocket 实例的协议字段来验证套接字(客户端只是在 websocket 连接上设置第二个参数),但我更喜欢不必处理“坏”套接字在连接后关闭并停止他们通过http进行初始握手,无论过程如何。

4

1 回答 1

0

我见过的最好的例子是:https ://github.com/mauricekraus/nestjs-ws-wrapper

请注意,该示例有效,但该包似乎缺少 package.json 中的一些依赖项。

他正在使用 JWT 进行身份验证,但我相信您可以轻松地适应这种方法。

从描述:

如果用户未正确验证(在连接事件之前,但在升级时),此项目会尝试阻止建立 websocket 连接。

并在使用情况下

只需从基类 (SocketGateway) 继承,如果您想让您的套接字经过身份验证,请创建一个 init 方法并用 @SocketInit() 装饰它并调用身份验证方法。

@SocketInit()
  public initTest(request: IncomingMessage) {
    return this.authenticate(request);
  }
于 2020-06-19T13:51:39.473 回答