OmniAuth Shibboleth策略配置未通过

时间:2012-11-01 15:12:55

标签: ruby-on-rails ruby omniauth shibboleth

我正在尝试使用omniauth-shibboleth策略(使用rack-saml)。

我的omniauth初始化程序如下所示:

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :shibboleth, {
    :info_fields => {
      :email => 'mail',
    },
    :extra_fields => [:cn, :sn, :schacHomeOrganization],
  }
end

一切都是成功的,直到omniauth-shibboleth应该设置omniauth.auth ENV变量,但这最终是部分的。

即 - 它确实检测到eduPersonPrincipalName并将其正确传递给uid - 我可以看到它。

它无法填写email和额外参数cn, sn, schacHomeOrganization

我已验证request.env 确实包含所有必需属性,因此问题不在Shibboleth方面。

为了进行调试,我对Gem文件lib/omniauth/strategies/shibboleth.rb中的选项进行了硬编码:

  option :info_fields, {:email => 'mail'}
  option :extra_fields, [:cn, :sn, :schacHomeOrganization]

然后一切正常。

因此,我的 Omniauth 设置或 omniauth-shibboleth 处理选项的方式似乎存在问题,因此我的配置不会最终与之合并默认值。

我做错了什么?

版本:

omniauth - 1.1.1
omniauth-shibboleth - 1.0.8
rack-saml - 0.0.4

pow - 0.4.0

1 个答案:

答案 0 :(得分:0)

事实证明,设计处理Omniauth初始化本身,而我可以使用config/initializers/omniauth.rb切换:debug => true,设计覆盖任何其他选项我已经确定了。

因此,使用设计时配置 Omniauth策略的正确位置位于config/initializers/devise.rb

config.omniauth :shibboleth, {:uid_field => 'eppn',
                     :info_fields => {:email => 'mail', :name => 'cn', :last_name => 'sn'},
                     :extra_fields => [:schacHomeOrganization]
              }

以前我认为那条线只暗示Devise哪个策略是默认的。