在我的本地机器上,我运行了apache服务器(php,mysql)和简单的websocket服务器(c ++)。 现在,我正在尝试使用令牌进行某种用户授权。经过一些互联网搜索,我决定坚持这个:
- 当客户端代码决定打开WebSocket时,它会联系HTTP服务器以获取授权“票证”。
- 服务器生成此票证。它通常包含某种用户/帐户ID,请求票证的客户端的IP,a 时间戳,以及任何其他类型的内部记录 - 保持你可能 需要。
- 服务器存储此票证(即在数据库或缓存中),并将其返回给客户端。
- 客户端打开WebSocket连接,并作为初始握手的一部分发送此“票证”。
- 然后,服务器可以比较此票证,检查源IP,验证票证是否未被重复使用且未过期,并执行任何操作 其他类型的权限检查。如果一切顺利,WebSocket 现已验证连接。
醇>
上述解决方案是否意味着必须将数据库调用2次?首先在步骤2和3中,用户成功登录后,php生成票证并将其放入数据库。在第5步中,当(此时websocket服务器)必须通过再次查询同一个数据库来检查此票证时?
答案 0 :(得分:1)
不仅数据库使用了两次,如你所描述的那样,但它必须。这是您在Web上涉及不受信任的客户端时建立信任的方式。您以安全的方式存储信息,然后以安全的方式验证信息。
对令牌进行加密非常重要,否则可能会因为它在网上传播而受到操纵。
例如,如果使用私钥加密令牌,那么当它返回时,只有公钥才能解密它。因此,如果成功,您就知道令牌是您的,并且没有被篡改过。