Tornado WebSocket应用中的用户认证

9 投票
2 回答
12605 浏览
提问于 2025-04-17 07:52

现在,我在提升我的Tornado技能,有一个关于用户认证的问题。

我的解决方案是在首页创建一个安全的令牌,然后将这个令牌和其他数据一起从JavaScript发送到Tornado服务器,在那里进行检查和用户认证。

我考虑过使用cookie,但我不知道如何在 WebSocketHandler.on_message 中读取cookie。

你觉得怎么样?我哪里做错了?谢谢!

2 个回答

6

一个客户端可能会用一个假的用户信息来构造请求头,内容大概是这样的:'user="ImFkbWxxxx==|xxxxxxxxxx|9d847f58a6897df8912f011f0a784xxxxxxxxxx"'。

我觉得下面这种方法更好。如果用户不存在,或者cookie的ID不正确或者被篡改了,那么函数get_secure_cookie就不会返回任何用户信息。

class WebSocketHandler(tornado.websocket.WebSocketHandler):

    def open(self):
        user_id = self.get_secure_cookie("user")
        if not user_id: return None
        ...
11

我建议你看看文档中的概述部分

那里应该有一些相关的内容:

编辑

我刚意识到你的问题是关于websockets的。我认为你可以按照你提到的方法来做:

  • 在应用的非websocket部分创建一个cookie
  • 在websocket处理程序中检查这个cookie

你应该能够在websocket处理程序中通过 self.request.headers 来访问请求头。

撰写回答