Rails中的Shibboleth身份验证

时间:2014-11-24 22:52:15

标签: ruby shibboleth

我正在努力让这个工作,所以我创建了一个地狱世界的Rails应用程序,试图让它工作。

以下是代码无效的repo:https://github.com/pitosalas/shibtry

以下是我从一个空的Rails应用程序开始做的事情:

  1. 我已经为gem文件添加了两个宝石:

    gem 'omniauth-shibboleth'
    gem 'rack-saml'
    
  2. 我从我大学的网站上获得了shibboleth元数据,并使用shib_conv.rb将其转换为相应的YAML:./ config.yml

  3. 我已更新添加get '/auth/:provider/callback', to: 'sessions#create'

  4. 的路线
  5. 我在SessionController#create

  6. 处设置了一个断点
  7. 我添加了初始化程序:omniauth.rb:

    Rails.application.config.middleware.use OmniAuth::Builder do
      provider :shibboleth, {
        :shib_session_id_field     => "Shib-Session-ID",
        :shib_application_id_field => "Shib-Application-ID",
        :debug                     => true,
        :extra_fields => [
          :"unscoped-affiliation",
          :entitlement
        ]
      }
    end
    
  8. 我添加了rack_sam.rb初始值设定项:

    Rails.application.config.middleware.insert_after Rack::ETag, Rack::Saml,
      { :metadata => "#{Rails.root}/config/metadata.yml"}
    
  9. 现在,运行服务器并转到http://0.0.0.0:3000/auth/shibboleth,我收到错误消息:

    undefined method `[]' for nil:NilClass'
    

    在rack-saml / misc / onelogin_setting.rb第13行追溯到这一行,这是:

    settings.idp_sso_target_url = @metadata['saml2_http_redirect']
    
    换句话说,查找该键的元数据哈希值。碰巧在我的metadata.yml文件中存在密钥,但是到了这个onelogin_setting.rb第13行时,@metadata是nil(它应该包含文件的内容),因此该密钥不存在不存在。

  10. 这就是现在,这条小道干涸了。

2 个答案:

答案 0 :(得分:1)

我完全绕过了Shibboleth。我的目标是允许登录我的大学认证系统专门允许学生使用他们的学生登录登录,这是谷歌应用程序的前面。所以这更容易:https://developers.google.com/identity/sign-in/web/

答案 1 :(得分:0)

您似乎忘了将配置文件添加到初始化程序中:

Rails.application.config.middleware.insert_after Rack::ETag, Rack::Saml,
 {
   :metadata => "#{Rails.root}/config/metadata.yml",
   :config => "#{Rails.root}/config/rack-saml.yml"
 }

rack-saml.yml中的saml_idp设置必须与metadata.yml中idp_lists条目的键匹配