Python套接字服务器使用令牌进行客户端身份验证

时间:2014-09-25 21:36:20

标签: python twisted

基本上我想解决两个问题:

  1. 客户端在初始化与服务器的连接时发送查询字符串

  2. 服务器端在握手时验证用户令牌(不是在建立连接之后验证包含令牌的流式消息)并相应地设置用户会话。

  3. 我读了一篇文章(https://auth0.com/blog/2014/01/15/auth-with-socket-io/),讨论了在nodejs中实现的这个过程,只是想知道是否可以通过使用python实现相同的功能。 (目前我正在做一些关于扭曲的研究,但没有找到类似的东西)

    PS:猜测它也有助于演示用例。用户可以通过普通的http登录您的服务器,然后服务器将向他/她发出有效的accessToken。然后,该用户可能需要与服务器(或其他服务器)建立套接字连接,然后服务器需要确定用户是谁并在建立套接字连接之前进行验证。

1 个答案:

答案 0 :(得分:1)

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

如果您正在构建TCP套接字服务器而不是HTTP服务器,那么您将无法获得URL或标头或带外任何其他内容。*您所获得的只是一个数据流。您需要为您的数据提供一个可以将令牌放入其中的协议。

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

请注意,这正是HTTP的作用 - 在接受连接并读取第一行数据之前,它无法查看查询字符串。

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


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