2014-09-25 62 views
1

有基本上是两个问题,我想解决:初始化到服务器Python的插座服务器通过使用客户端做验证令牌

  • 服务器端连接时

    1. 客户端发送的查询字符串在握手中验证用户令牌(不是在连接建立之后,然后验证包含令牌的流消息)并相应地设置用户会话。

    我读了文章(https://auth0.com/blog/2014/01/15/auth-with-socket-io/)谈到有关此过程中实现的NodeJS,只是想知道同样的功能可以通过使用python来实现。 (目前我正在做一些关于扭曲的研究,但还没有发现任何类似的东西)

    PS:猜测它有助于演示用例。用户可以通过正常的http登录到你的服务器,然后服务器将向他/她发出一个有效的accessToken。那么这个用户可能需要与服务器(或其他服务器)建立套接字连接,然后服务器需要在建立套接字连接之前找出用户是谁并验证。

  • 回答

    1

    查询字符串是HTTP URL的一部分。

    如果您正在构建一个TCP套接字服务器而不是HTTP服务器,那么您不会获得URL或标头,或其他任何带外。*您所获得的只是一串数据。您需要为您的数据提供适合令牌的协议。

    这意味着服务器无法“在建立套接字连接之前找出用户是谁并验证它”。它必须建立套接字连接,读取第一条消息,解析它,验证令牌,然后删除或继续连接。 (当然,你可以建立一个接受连接的前端服务器,验证它们,然后迁移或代理它们到真实的后端服务器,但某人必须接受,读取和解析。)

    请注意,这正是HTTP所做的 - 它在接受连接并读取第一行数据之前不能看到查询字符串。

    同时,您正在查看的示例似乎正在使用WebSockets。 WebSockets客户端无法与套接字服务器进行通信(当然,除非在套接字服务器之上或其前面的代理服务器上构建WebSocket服务器)。


    *这不是相当如此。您可以将40个字节的选项填充到TCP标头扩展中。但是当你说他们说的是“套接字服务器”时,你不得不低于人们通常谈论的水平 - 而且很有可能它不会通过互联网。此外,TCP 确实有有一个“带外”数据的概念,但在这里并不相关;您仍然必须接受连接并从中读取以获取OOB数据。

    +0

    感谢您在这里解决关键问题,直到现在我还没有意识到WebSocket和Socket之间的区别。因此,对于这种用例,除了在建立套接字之后进行用户令牌认证之外,还有其他方式通过套接字通信来认证用户吗? – Yang 2014-09-25 22:08:55

    +0

    @杨:理论上你可以尝试基于来自同一个源地址进行身份验证......但我认为你链接的文章解释了为什么这是一个坏主意。你也可以在UDP之上构建你自己的类TCP流,并将令牌部分作为流连接协商的一部分(例如参见SIP,WebRTC,RTMFP等),但这对于一个漂亮的工作来说是相当大的工作量如果你的目标只是“我想要的是TCP所做的,除非我想避免没有令牌的连接建立的成本”。你真的想在这里解决什么真正的问题? – abarnert 2014-09-25 22:54:51

    +0

    我试图编写一个与主服务器分开的游戏服务器(称之为认证服务器或其他),因为用户登录MS并且MS会存储会话(在某些缓存中像redis)并返回用户acessToken。然后,当用户实际连接到游戏服务器时,我希望使用与此游戏服务器的身份验证机制相同的标记来验证用户并知道他/她是谁。 – Yang 2014-09-25 23:28:13

    相关问题