我正在尝试使用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
答案 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哪个策略是默认的。