在子域之间共享会话,设计身份验证已完成401未经授权

时间:2018-01-03 18:07:19

标签: ruby-on-rails devise session-cookies session-store

我有2个ruby rails应用程序,每个都有一个用于身份验证的设计宝石,我的目标是使用共享会话实现简单的SSO(单点登出)。

其中一位有public.admin.com,另一位有private.admin.com 我使用以下配置:

session_store.rb

Rails.application.config.session_store :cookie_store, key: '_shared_admin_session', domain: '.admin.com', tld_length: 2

配置/ secrets.yml

我在两个应用程序中也使用相同的secret_key_base

devise.rb

config.stretches = 1

config.pepper = ''

application.rb中

config.action_dispatch.cookies_serializer = :hybrid

我可以登录其中一个并且会话打开后,一旦我打开另一个域Completed 401 Unauthorized被返回并且opend会话关闭并从第一个域退出。

我尝试过使用domain: 'admin.com'domain: :all..session_store :redis_store..,但始终使用相同的结果。

任何人都可以帮我找到问题,或建议更好的解决方案,我会很感激。

2 个答案:

答案 0 :(得分:1)

如果您想在域之间共享会话,请编辑 config / initializers / session_store.rb 文件,如下所示:

APPNAMEGOESHERE::Application.config.session_store :cookie_store, :key => '_tourlyapp_session', :domain => "your_domain_name.com"

这里的诀窍是:domain选项。它的作用是设置TLD(顶级域)的级别,并告诉Rails域的长度。您要注意的部分是,如果您在某些地方设置domain: :all之类的建议,除非您使用的是localhost,否则它将无法使用。 :所有默认值都是TLD长度为1,这意味着如果您使用Pow(myapp.dev)进行测试,它将无法正常工作,因为这是一个长度为2的顶级域名。

我希望这可以帮助你

答案 1 :(得分:0)

我发现了问题,很简单。

问题在于使用2个不同的DB,在统一管理表之后工作正常。