【问题标题】:Sharing a rails session with an erlang server与 erlang 服务器共享 rails 会话
【发布时间】:2011-08-20 18:36:03
【问题描述】:

我正在计划一款多人网络回合制游戏。入口点将是一个普通的 rails 应用程序,但后端将用 erlang 编写。我可能会使用 socket.io 进行通信。

问题是,我应该如何处理 rails 和 erlang 之间的会话共享?我可以想到几个选项,如果您愿意,可以提供更多选项:D

  1. 将 Rails 会话 cookie httpOnly 值设置为 false,并在 erlang 端对其进行反序列化。我已经在 erlang 中使用自定义 websocket 服务器尝试过这个。它可以工作,但是安全性稍差一些,而且我与 ruby​​ 1.8 相关联,因为我还没有找到一个库来从 erlang 中解组 ruby​​ 1.9 的东西。除此之外,erlang 中的 socket.io 还没有提供获取请求头的方法。
  2. 基于令牌的方法。理想情况下,客户端会发送一些令牌,并且 erlang 应该能够证明用户是应该的用户。我不知道该怎么做。
  3. HTTP API。 rails 应用程序可以提供一些 API,erlang 服务器可以使用这些 API 来检查用户凭据。

请告诉我您遇到类似问题的经历以及您是如何处理这些问题的。提前致谢!

【问题讨论】:

    标签: ruby-on-rails session erlang websocket socket.io


    【解决方案1】:

    我使用了第二种方法,让一个应用程序生成一个令牌,然后您可以稍后在 erlang 应用程序中进行身份验证和授权。这非常有效,因为这两个系统彼此完全独立,除了以相同的方式创建令牌。

    但是,使用这种方法,您必须特别注意用户无法重新创建令牌。例如,如果用户要发现如何为不同的用户创建有效令牌,他可以访问您系统中的任何用户帐户。请理解,加密很难,即使是专业的加密专家也会时不时地搞错。我建议向该领域的专家寻求有关如何创建令牌的帮助。

    要求第一个应用程序验证和授权令牌的第三个选项也可能是一个可行的解决方案。我看到的问题是,您只想每个令牌调用第一个应用程序一次,并在 erlang 应用程序内的以下请求中对令牌进行身份验证和授权。另一个问题是你的 erlang 应用现在依赖于你的 rails 应用。

    【讨论】:

    • 所以我应该发送一个令牌和一个随机的“salt”,其中令牌是散列 user_id + secret + salt 的结果,并且能够在 erlang 端解密,对吧?一个问题是有人能够检索这些值并作为另一个用户进行身份验证。我不认为他们能够为每个用户生成令牌。
    • 我对加密的了解足够多,知道这很难做到。也许您可以针对这个特定问题创建一个新问题,然后让知识渊博的人回答。
    【解决方案2】:

    看看这个:Panmind

    【讨论】:

    • 是的,我已将其用于原型中的选项 #1。不得不将cookie设置为httpOnly=false,我真的不知道这有多不安全。
    • 我认为这是要走的路,但请确保用户不能将脚本标签添加到您的应用程序中:edgeguides.rubyonrails.org/…
    猜你喜欢
    • 2016-06-17
    • 2018-05-18
    • 1970-01-01
    • 2010-09-27
    • 1970-01-01
    • 1970-01-01
    • 2012-04-05
    • 2017-04-19
    • 2015-04-13
    相关资源
    最近更新 更多