Ruby on rails rails和NodeJ之间的安全性

Ruby on rails rails和NodeJ之间的安全性,ruby-on-rails,ruby-on-rails-3,security,node.js,Ruby On Rails,Ruby On Rails 3,Security,Node.js,我有一个应用程序,主要是在rails中,但也使用nodejs实现一些实时功能,例如聊天。用户通过Rails登录,并像往常一样获得会话分配等。但是,作为同一个用户向nodejs进行身份验证的最佳方式是什么?例如,我想防止用户相互模仿,但现在登录是在rails上完成的,消息传递是在NodeJ上完成的。Rails和NodeJ都可以访问同一个数据库 如果有必要的话,我正在使用Desive和socketio。在实现方面有很多方法可以解决这个问题。首先想到的是通过数据库与NodeJ共享Desive使用的会话

我有一个应用程序,主要是在rails中,但也使用nodejs实现一些实时功能,例如聊天。用户通过Rails登录,并像往常一样获得会话分配等。但是,作为同一个用户向nodejs进行身份验证的最佳方式是什么?例如,我想防止用户相互模仿,但现在登录是在rails上完成的,消息传递是在NodeJ上完成的。Rails和NodeJ都可以访问同一个数据库


如果有必要的话,我正在使用Desive和socketio。

在实现方面有很多方法可以解决这个问题。首先想到的是通过数据库与NodeJ共享Desive使用的会话cookie

IIRC装置在认证期间创建加密会话cookie;将此值临时保存到数据库中,并让nodejs将其从数据库中弹出以进行身份验证。实现这一点可能会有一些困难(将一些Desive加密移植到nodejs等),但如果您正在开发rails/nodejs应用程序,我很肯定您能够处理它D


这里的好处是,用户无法在切换之间完成模拟。

您始终可以为在rails和节点之间传递的任何用户生成一次性令牌。比重新实现(和维护)Desive和rails使用的加密策略要容易得多

这就是说,在服务器之间共享会话为您带来了大量额外的工作,并有效地使您的bug表面积(模式、验证等)翻了一番


Faye是一个非常棒的项目,它可以处理这个确切的用例,因此可能值得一看:)

如果我有误解,请告诉我:这样用户就可以点击rails并获取会话(会话也存储在数据库中)。用户希望聊天,以便连接它会在会话中发送哪个节点可以弹出数据库来验证它是同一个用户。有些东西会被发送回用户,以供将来的nodejs通信?或者您可以添加更多关于如何工作的细节吗?@jhchen这取决于聊天是否来自同一个域。如果它来自同一个域或子域,那么cookie将跨rails和NodeJ工作,db中的会话将由NodeJ将其标识为有效会话。如果他们在不同的域上,事情会变得更复杂,因为你不能在域之间共享cookie;此时您正在实现单点登录-我不熟悉单点登录的实现细节,但谷歌应该能够提供帮助。如果您在JS中实现Desive的加密策略,则无需使用DB来传输会话。只需从客户机的请求中读取即可——会话cookie包含一个安全摘要以防止篡改。当用户从rails传递到节点时,为每个用户生成一次性令牌可能会更容易。如果您希望rails提供一些API,节点提供一些API,并共享会话身份验证,Faye究竟有何帮助?我也不理解Faye如何使此场景更易于管理。它似乎是Ruby类固醇上的Socket.io,但没有与Desive集成……我认为关键是将实时堆栈移动到当前的应用程序。不过还不清楚。