gpt4 book ai didi

node.js - 如何使用 TOKENS 而不是 COOKIES 来通过express和socket.io进行身份验证。

转载 作者:太空宇宙 更新时间:2023-11-03 22:54:50 26 4
gpt4 key购买 nike

我正在构建一个实时移动应用程序( native ),并且我有兴趣从用户登录屏幕启动该应用程序,然后继续。

我想我需要 Express + primus使用socket.io(或sockjs)+passport.socketio+redis(还不能100%确定我需要redis)来构建我的后端。

Node.js placeholder

我什至发现了this step by step tutorial这真的很有帮助,它帮助我一步步制作一个安全的 api。

我的问题是双重的:

  1. 如何调整此示例以使用 token 而不是 cookie(因为我正在构建 native 移动应用程序而不是浏览器网络应用程序)and its more secure according to this .
  2. 如何将express与socket.io绑定(bind) - 换句话说,socket.io如何知道用户是否通过了身份验证?

欢迎任何评论或建议。

谢谢。

最佳答案

首先,我会使用不同的 websocket 库而不是 socket.io。 socket.io 开发人员目前正在开发engine.io,而socket.io 似乎没有得到非常积极的维护。我经历过以下链接中描述的许多问题,并且自从迁移到 sockjs 以来没有遇到任何问题。

http://www.quora.com/Sock-js/What-are-the-pros-and-cons-of-socket-io-vs-sockjs?share=1 https://github.com/LearnBoost/socket.io/issues https://github.com/ether/etherpad-lite/issues/1798 http://baudehlo.com/2013/05/07/sockjs-multiple-channels-and-why-i-dumped-socket-io/

您可能必须在 sockjs 之上实现您自己的自定义事件,但这非常简单。既然听起来您已经在使用 redis,那么实现 rooms 和 pub/sub 也应该非常容易。

这是我们如何进行基于 token 的套接字身份验证。

  1. 首先,客户端向服务器发出 HTTP 请求以请求 token 。这将通过 Express 中间件路由请求,并使您可以轻松访问 session 数据。您可以在此处与 Passport 进行交互以访问其帐户或 session 数据。如果用户登录,则生成一个 UUID 并将其 session 数据作为键/值对存储在 Redis 中,其中键是 UUID,值是其字符串化 session /帐户数据。仅将 UUID 发送回客户端。
  2. 当客户端首次创建 Websocket 连接时,会在套接字上设置一个标志,将其标记为未经身份验证。
  3. 当消息传入套接字时,检查套接字是否经过身份验证。如果没有,则检查消息中是否有 token 。如果不存在则终止连接。如果是,则在 Redis 中查询由 token 作为键控的键/值对。如果 redis 返回任何数据,那么您现在拥有该用户的 session 数据,并且可以将其附加到套接字并将套接字标记为已通过身份验证。如果 redis 中没有任何由 token 键入的内容,则终止连接。

现在,当您在套接字上执行任何操作时,您应该有权访问该用户的 session 数据。

关于node.js - 如何使用 TOKENS 而不是 COOKIES 来通过express和socket.io进行身份验证。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23309316/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com