0

我正在尝试使用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.authENV变量,但这最终是部分的。

即-它确实检测到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
4

1 回答 1

0

事实证明,Devise自己处理 Omniauth 初始化,虽然我可以使用config/initializers/omniauth.rbtoggle :debug => true,但 Devise 覆盖了我设置的任何其他选项。

因此,在使用Devise时配置Omniauth 策略的正确位置是:config/initializers/devise.rb

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

以前我认为该行仅提示设计默认策略。

于 2012-11-03T12:21:53.723 回答