2013-08-18 48 views
7

我試圖最終擁有的是通過設計登錄的能力,或者選擇使用SAML登錄。所以我讀到,如果我整合omniauth和saml,然後omniauth和設計,我可以實現這一點。Rails - 在多個國內流離失所者中使用omniauth-saml

我的問題是,我有不同的IDP,我想選擇。所以我沒有:idp_sso_target_url,但很多。所以我的問題是我如何動態地改變target_url的值。目前omniauth,SAML寶石定義在config/initializers目錄這個值..

謝謝

回答

3
Rails.application.config.middleware.use OmniAuth::Builder do 
    provider :saml, 
    name: "first", 
    assertion_consumer_service_url: "/auth/first/callback", 
    issuer: "your-app", 
    idp_sso_target_url: "first.com/idp" 
    idp_cert_fingerprint: "E7:91:B2:E1:...", 
    name_identifier_format: "urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress" 
    provider :saml, 
    name: "second", 
    assertion_consumer_service_url: "/auth/second/callback", 
    issuer: "your-app", 
    idp_sso_target_url: "second.com/idp", 
    idp_cert_fingerprint: "E7:91:B2:E1:...", 
    name_identifier_format: "urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress" 

end 
4

您可以將設置存儲在數據庫的每個供應商,然後在安裝階段,在配置omniauth請求時。例如:

SETUP_PROC = lambda do |env| 
    request = Rack::Request.new(env) 
    user = User.find_by_subdomain(request.subdomain) 
    env['omniauth.strategy'].options[:consumer_key] = user.consumer_key 
    env['omniauth.strategy'].options[:consumer_secret] = user.consumer_secret 
end 

use OmniAuth::Builder.new do 
    provider :twitter, :setup => SETUP_PROC 
end 

請參閱https://github.com/intridea/omniauth/wiki/Setup-Phase瞭解更多信息。

0

如果在聯合環境中使用該應用程序,則很可能會有元數據源,如saml2int.org配置文件中所述。此元數據具有填充IDP發現的數據(並自動配置所有IDP)。似乎omniauth-saml不支持SAML元數據規範,因此某種SAML代理是另一種選擇。

0

使用多個SAML國內流離失所者與設計+ OmniAuth:

按照單IDP本官方指南。

https://github.com/omniauth/omniauth-saml#devise-integration

一旦你有你的SP單IDP工作,做以下調整

  1. devise初始化

    config.omniauth :first, { 
              name: :first, 
              strategy_class: ::OmniAuth::Strategies::SAML, 
              #Rest of the config as per omniauth-saml guide 
              assertion_consumer_service_url: '/users/auth/first/callback'} 
    
    
    
    config.omniauth :second, { 
              name: :second, 
              strategy_class: ::OmniAuth::Strategies::SAML, 
              #Rest of the config as per omniauth-saml guide 
              assertion_consumer_service_url: '/users/auth/second/callback'} 
    
  2. Users::OmniauthCallbacksController,添加名爲firstsecond行動而不是按照建議的saml官方指南。

  3. 在你User型號:

    devise :omniauthable, omniauth_providers: [:first, :second] 
    

如果一切配置正確,您現在已經配置了兩個國內流離失所者的SP。

相關問題