首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用express和socket.io使用令牌进行身份验证,而不是使用COOKIES。

如何使用express和socket.io使用令牌进行身份验证,而不是使用COOKIES。
EN

Stack Overflow用户
提问于 2014-04-26 10:01:47
回答 1查看 3.2K关注 0票数 1

我正在构建一个实时移动应用程序(本机),我感兴趣的是从用户登录屏幕启动应用程序,然后继续前进。

我想我需要用普里默斯 + socket.io (或sockjs) + passport.socketio + redis (不是100%确定我还需要redis )来构建我的后端。

我甚至找到了一个非常有用的本教程分步骤进行,它需要我一步一步地做一个安全的api。

我的问题是双重的:

  1. 我如何调整这个示例来使用令牌而不是cookie(因为我正在构建一个本地移动应用程序,而不是浏览器web应用程序) 根据这一点,它更安全
  2. 如何将表达式绑定到socket.io -换句话说,socket.io如何知道用户是否经过身份验证?

我欢迎任何意见或建议。

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-26 17:49:11

首先,我将使用不同的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/

您可能必须在套接字之上实现您自己的自定义事件,但这非常简单。因为听起来你已经在使用redis了,那么实现房间和pub/sub也应该很容易。

下面是我们如何进行基于令牌的套接字身份验证。

  1. 首先,客户端向服务器发出HTTP请求以请求令牌。这将通过express‘中间件路由请求,并为您提供对会话数据的轻松访问。在这里,您将与护照交互以访问他们的帐户或会话数据。如果用户登录了,那么生成一个UUID,并将他们的会话数据作为键/值对存储在redis中,其中键是UUID,值是他们的字符串会话/帐户数据。只将UUID发送回客户端。
  2. 当客户端第一次创建websocket连接时,在套接字上设置一个标志,将其标记为未经身份验证。
  3. 当消息出现在套接字上时,检查该套接字是否经过身份验证。如果没有,则检查消息中是否有令牌。如果它不存在,那么关闭连接。如果它这样做了,那么查询由令牌键键的键/值对的redis。如果redis返回任何数据,那么您现在可以获得该用户的会话数据,并可以将其附加到套接字并将套接字标记为身份验证。如果在红键中没有标记键,那么关闭连接。

现在,当您对套接字执行任何操作时,您应该可以访问该用户的会话数据。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23309316

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档