【问题标题】:Authenticate websocket clients using tokens?使用令牌验证 websocket 客户端?
【发布时间】:2014-05-06 11:47:59
【问题描述】:

我想为我的注册用户提供基于 websocket 的服务。 网站前端在服务器 A 上运行,WebSocket-Service 在服务器 B 上运行。

我想确保服务器 B 不会向未经服务器 A 验证的用户授予访问权限。我还想避免会话被劫持。

我想出了这种方法,但我从未为 websocket 实现安全性。 这可能是一个好方法吗?:

  • 当客户端想要连接我的 WebSocket 时,服务器 A 请求一个 来自服务器 B 的令牌。服务器 B 将生成此令牌并发送 它返回到服务器 A。

  • 服务器 B 将令牌存储在缓存中。

  • 现在允许客户端连接到 WebSocket。客户 第一条消息包含令牌。

  • 服务器 B 检查是否可以在缓存中找到令牌并 令牌是否已被活动会话使用。

  • 如果一切正常,客户端将被注册并被允许 使用服务。

这是一个好方法吗?有没有更好的解决方案我不必自己实施?

我阅读了这个解决方案: Best way to create a TOKEN system to authenticate web service calls?

但是由于我的用户每分钟最多发送 500 条消息(这是可能的最高值..但仍然可能)我认为这可能会造成一些麻烦...

【问题讨论】:

标签: authentication websocket token


【解决方案1】:

cookie 有什么问题?

如果两台服务器在同一个二级域(web.example.com 和 websocket.example.com),它们可以共享 cookie。

websocket 连接将在协商期间发送该二级域的现有 cookie。

所以你可以在 web 服务器中执行认证,返回一个认证 cookie,然后 websocket 会再次将该 cookie 发送到服务器。 websocket 服务器应该能够打开和读取 cookie。

“每分钟500条消息”是每秒8条消息,应该不是问题。 Websocket 连接建立一次,每条消息都没有新的连接。 websocket 与 webservice 不同。

干杯。

【讨论】:

  • 感谢您的回答。你认为我怎样才能避免 CORS 攻击?我应该在第一条消息中发送会话 cookie,还是有办法在建立连接时发送该信息?
  • cookie 在连接时发送,作为握手的一部分。您应该使用安全令牌作为 cookie 值,然后安全模型与普通 Web 应用程序中的相同。
  • 当我的服务器在同一个二级域时,HttpSession ID 是否相同?在这种情况下,我什至不需要 cookie,对吧?
  • 可能会话 id 已经在 cookie 中。检查您的平台如何处理会话,但可能已经有用于会话和身份验证管理的工具。
  • 您好,我刚刚按照您的回答进行操作,但遇到了问题。如何将 cookie 发送到 websocket 服务器?我想在握手期间这样做,但我没有 httpsession 可供阅读。可以看看stackoverflow.com/questions/23565223/…吗?
猜你喜欢
  • 2018-04-20
  • 2016-07-18
  • 2015-09-20
  • 1970-01-01
  • 2011-10-29
  • 2017-12-04
  • 2013-04-27
  • 2015-11-03
  • 2014-06-26
相关资源
最近更新 更多