Authenticate multiple Rails servers against Devise authentication

时间:2018-12-03 13:19:15

标签: ruby-on-rails ruby devise

We have a monolithic Rails 3 (Ruby 1.9) server that does everything for us, including Devise session authentication.

We have recently decided to introduce a new Rails 5 server (built from scratch) which will serve as an API server and slowly replace existing capabilities in the old server.

Our problem is that session authentication happens against the old rails server and we want to include session authentication in the new Rails 5 server.

Does anyone have experience or suggestions on how to use new rails servers authenticate sessions against an existing rails server which has session information?

Needless to say, my main focus is on Front End development - server side authentication is not my forte.

1 个答案:

答案 0 :(得分:1)

您可以有多个Rails应用程序,它们共享同一数据库并使用Device来验证用户身份。但是您需要确保在加密密码时使用相同的输入/算法。

对于Devise,默认情况下,BCrypt已经存在一段时间了,您还需要确保config.stretches设置与两个应用程序都匹配。在过去的几年中,实施方式有所变化,您的里程可能会有所不同。

这里的关键概念是您不对应用程序进行身份验证-您在对用户提供的密码进行加密的结果与数据库中的摘要相匹配。

但是,您还应该首先认识到这些应用程序可能根本没有相同的身份验证要求。大多数API(至少是好的API)都使用基于令牌的身份验证,这种身份验证是无状态的。

基于会话的身份验证的一个主要问题是cookie通常在单个域或子域上工作,并且如果它们跨域工作(第三方cookie),它们通常会被浏览器禁用,这意味着如果您的api和旧版应用不在同一个子域中。 Cookie也是仅在浏览器中可用的功能,而基于令牌的身份验证可在任何类型的客户端中使用。

尽管您可以让新应用程序通过HTTP修改旧应用程序,但实际上这可能会浪费时间,因为新应用程序仍然需要自己的身份验证解决方案。

有许多宝石可以为Devise提供基于令牌的身份验证。