验证stomp web套接字客户端



我有一个ruby on rails应用程序部署到torquebox。我需要一些方法来保护我的应用程序中的websockets。我正在使用stomp websockets,有一种方法来验证用户,而他们使websocket连接?我可以使用用户名和密码参数,但它们目前被忽略。是否有其他方法验证此连接?谢谢!

可以使用会话和存储的令牌对消息进行身份验证。为此,您必须设置Rails以使用Torquebox会话存储。这可以通过初始化器完成,例如config/initializers/torquebox_init.rb:

AppName::Application.config.session_store :torquebox_store

现在Stomplet可以访问会话了。下面是一个示例Stomplet,它使用会话参数:authentication_token来匹配数据库中User的authentication_token。检查验证令牌是否订阅、发送消息和取消订阅:

require 'torquebox-stomp'
class StompletDemo
  def initialize()
    super
    @subscribers = []
  end
  def configure(stomplet_config)
  end
  def on_message(stomp_message, session)
    token = session[:authentication_token]
    if is_authenticated?( token )
      @subscribers.each do |subscriber|
        subscriber.send( stomp_message )
      end
    end
  end
  def on_subscribe(subscriber)
    session = subscriber.session
    if is_authenticated?(session[:authentication_token])
      @subscribers << subscriber
    end
  end
  def on_unsubscribe(subscriber)
    session = subscriber.session
    if is_authenticated?(session[:authentication_token])
      @subscribers.delete( subscriber )
    end
  end
  def is_authenticated?(token)
    User.where( authentication_token: token ).exists?
  end
end

现在您所要做的就是确保当用户进行身份验证时,设置了session[:authentication_token]。大多数情况下,这将在控制器中设置:

 # user has successfully authenticates
 session[:authentication_token] = @user.authentication_token

对于其他人有这个问题,我是这样解决的。

https://gist.github.com/j-mcnally/6207839

基本上令牌系统不适合我,特别是因为我使用了设计。如果你想托管你的websocket说一个chrome扩展,它更容易直接通过用户名/密码stomp,让它在stomplet管理自己的虚拟订户会话。这也允许你做一些有趣的事情,只要你推送给谁。

相关内容

  • 没有找到相关文章

最新更新