2016-05-06 98 views
1

我有两个应用程序,AppA和AppB,它们都是Rails应用程序。如何使用devise,omniauth登录到远程rails应用程序

我创建了一个使用Devise,Omniauth和Doorkeeper的单点登录机制。 这是如果您登录到AppA,那么您将被授权给AppB,因为AppB向AppA发出oauth呼叫以检查此情况。 AppA有设计,目前你必须登录。

我希望能够做的是在AppB中创建一个ajax登录表单,并且这会将我的凭据传递给AppA中的Devise,并允许我访问AppB,而不是重定向到AppA并返回。

我似乎能够做到这一点,如果我禁用在AppA中的CSRF检查,但我希望能够有一个替代方案,我或者不必这样做,或者我可以提供一个替代方案,而无需任何安全漏洞。

所以我的主要问题是,如果有人有任何想法如何做到这一点,或者他们做了类似的事情,并有建议吗? 非常感谢,

埃蒙

回答

0

您可以禁用CSRF在API控制器检查(在你的ApplicationController让你的应用程序的其余部分被保护离开它)有,例如:

class ApiController < ApplicationController 
    protect_from_forgery with: :null_session 
end 

或者,如果您只想禁用某些操作的CSRF检查,例如将以下内容添加到您的控制器中:例如:

skip_before_action :verify_authenticity_token, only: [:new, :create] 
+0

谢谢您的回复,但我想要当然,我对此有一些保障,所以我不只是想拿走CSRF并且不留下任何东西。 – etphoneshome

+0

正如我上面提到的 - 你只想在你的ApiController *中禁用CSRF检查*。然后,您可以默认在您的ApplicationController中启用CSRF保护,以便保护您的其他应用程序。 – mwalsher

相关问题