如何在Tornado中验证WebSockets

时间:2015-08-05 14:13:04

标签: authentication websocket tornado

是否可以在Tornado中验证WebSocket握手请求?如果是这样,怎么样?如果没有,我在哪里可以检查经过身份验证的用户之前打开WebSocket?

1 个答案:

答案 0 :(得分:2)

您的问题专门询问在打开websocket连接之前验证

如果您愿意允许打开连接以进行身份​​验证,那么在身份验证失败时仍会关闭(仍然保证不会发送任何数据),那么您需要在{{1}中定义一个条件您的套接字处理程序的方法,检查用户是否经过身份验证,并拒绝初始化数据流,否则(the WebSocketHandler source可能会感兴趣),关闭连接。在初始握手时调用Open,但在方法返回之前不会发送任何数据。因此,您可以在初始化侦听端点之前关闭连接。

您可以使用RequestHandler.current_user检查经过身份验证的用户的请求:这可以在任何处理程序中使用,包括open

您可能也在使用authentication cookies - 只需使用WebSocketHandlerself.request.headers即可访问套接字处理程序中的Cookie。

如果你选择使用cookie,你会有这样的事情:

get_secure_cookie

如果由于某种原因重要的是永远不会调用class SocketHandler(tornado.websocket.WebSocketHandler): def open(self): user_slug = self.get_secure_cookie("user_cookie") if user_slug: ... else: ... self.close() ... ,您可以考虑从open调用覆盖get,以排除所有初始化:

WebSocketHandler