2013-08-18 11 views
7

Quello che sto cercando di ottenere è la possibilità di effettuare il login normalmente con devise OPPURE scegliere di accedere con SAML. Così leggo che se integro omniauth e saml, quindi omniauth e idea, potrei farlo.- Utilizzo di omniauth-saml con più IDP

Il mio problema è che ho diversi IDP che vorrei scegliere. Quindi non ne ho uno: idp_sso_target_url, ma molti. Quindi la mia domanda è come posso modificare dinamicamente il valore di target_url. Attualmente la gemma omniauth-SAML definisce questo valore nella cartella config/initializers ..

Grazie,

risposta

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

È possibile memorizzare le impostazioni per ogni fornitore di in db, e quindi configurare omniauth in fase di messa a punto a richiesta-tempo. Per esempio:

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 

Vedi https://github.com/intridea/omniauth/wiki/Setup-Phase per ulteriori informazioni.

0

Se si utilizza l'applicazione in un contesto di federazione, molto probabilmente sarà disponibile un'origine di metadati, come prescritto nel profilo saml2int.org. Questi metadati hanno i dati per popolare l'individuazione di IDP (e configurano automaticamente tutti gli IDP). Sembra che omniauth-saml non supporti le specifiche dei metadati SAML, quindi una sorta di proxy SAML è l'alternativa.

0

Utilizzo di più sfollati SAML con Devise + OmniAuth:

seguire questa guida ufficiale per singolo IDP.

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

Una volta ottenuto il SP lavorare con singolo IDP, non seguenti modifiche

  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, aggiungere azioni denominate first e second in invece di saml come suggerito in guida ufficiale.

  3. nel modello User:

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

Se tutto configurato correttamente, Ora avete la vostra SP configurato per due sfollati.