2013-08-18 8 views
7

Was ich versuche am Ende zu haben, ist die Fähigkeit, die normalerweise mit devise anmelden oder wählen mit SAML einzuloggen. Also lese ich, wenn ich Omniauth und Saml, dann Omniauth und Devise integriere, könnte ich das erreichen.Rails - Mit omniauth-saml mit mehreren IDPs

Mein Problem ist, dass ich verschiedene IDPs, die Ich mag würde zur Auswahl. Also ich habe keine: idp_sso_target_url, aber viele. Also meine Frage ist, wie kann ich den Wert der target_url dynamisch ändern. Derzeit ist der omniauth-saml gem definiert diesen Wert in der config/initializers Verzeichnis ..

Danke,

Antwort

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

Sie können die Einstellungen speichern, für jeden Anbieter in db, und dann in der Aufbauphase konfigurieren omniauth bei Anfrage-Zeit. Zum Beispiel:

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 

Siehe https://github.com/intridea/omniauth/wiki/Setup-Phase für weitere Informationen.

0

Bei Verwendung der Anwendung in einer Föderation Kontext wird es höchstwahrscheinlich eine Metadatenquelle, wie zum Beispiel in dem saml2int.org Profil vorgeschrieben. Diese Metadaten enthalten die Daten zum Auffüllen der IDP-Erkennung (und konfigurieren automatisch alle IDPs). Es scheint, dass omniauth-saml die SAML-Metadaten-Spezifikation nicht unterstützt, daher ist eine Art SAML-Proxy die Alternative.

0

Verwendung mehrerer SAML IDPs mit Devise + OmniAuth:

diese offizielle Führung für Einzel IDP Folgen.

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

Sobald Sie Ihre SP Arbeit mit einzelnen IDP haben, gehen Sie wie folgt zwickt

  1. In devise initializer

    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. In Users::OmniauthCallbacksController, fügen Aktionen genannt first und second in anstelle von saml wie in vorgeschlagen offizieller Führer.

  3. In Ihrem User Modell:

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

Wenn alles richtig konfiguriert ist, können Sie jetzt zwei IDPs Ihre SP konfiguriert haben.

Verwandte Themen