2013-08-18 10 views
7

W końcu próbuję zalogować się za pomocą urządzenia OR lub zalogować się przy użyciu SAML. Czytałem więc, że jeśli zintegruję omniauth i saml, a następnie omniauth i opracuję, będę mógł to osiągnąć.Szyny - Używanie omniauth-saml z wieloma IDP

Mój problem polega na tym, że mam różne IDP, które chciałbym wybrać. Więc nie mam jednego: idp_sso_target_url, ale wiele. Moje pytanie brzmi: jak mogę dynamicznie zmieniać wartość parametru target_url. Obecnie gem omniauth-saml określa tę wartość w katalogu config/initializers ..

Dziękuję

Odpowiedz

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

można przechowywać ustawienia dla każdego operatora w dB, a następnie skonfigurować omniauth w fazie instalacji w czas oczekiwania. Na przykład:

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 

Aby uzyskać więcej informacji, zobacz https://github.com/intridea/omniauth/wiki/Setup-Phase.

0

Jeśli korzystasz z aplikacji w kontekście federacyjnym, najprawdopodobniej źródło metadanych, takie jak określone w profilu saml2int.org. Te metadane zawierają dane do zapełnienia odnajdywania IDP (i automatycznie konfigurują wszystkie IDP). Wygląda na to, że omniauth-saml nie obsługuje specyfikacji metadanych SAML, dlatego alternatywą jest pewien rodzaj proxy SAML.

0

Korzystanie z wielu przesiedleńców z SAML opracować + OmniAuth:

Śledź ten oficjalny przewodnik dla Jednolitego IDP.

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

Po Twojej SP pracy z pojedynczym IDP, wykonaj następujące szczypie

  1. W 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. W Users::OmniauthCallbacksController, dodać działań nazwanych first i second w zamiast saml zgodnie z sugestią oficjalny przewodnik.

  3. W modelu User:

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

Jeśli wszystko poprawnie skonfigurowane, masz teraz swoją SP skonfigurowany dla dwóch osób wewnętrznie przesiedlonych.

Powiązane problemy