2013-08-18 4 views
7

То, что я пытаюсь получить в конце, - это возможность входа в систему с помощью устройства или выбрать логин с SAML. Поэтому я читал, что, если я объединю омнют и салль, тогда омунайте и придумаю, я мог бы это достичь.Rails - Использование omniauth-saml с несколькими IDP

Моя проблема заключается в том, что у меня есть разные ВПЛ, которые я хотел бы выбрать. Поэтому у меня его нет: idp_sso_target_url, но многие. Поэтому мой вопрос заключается в том, как я могу динамически изменять значение target_url. В настоящее время OmniAuth-SAML камень определяет это значение в каталоге конфигурации/инициализаторов ..

Спасибо,

ответ

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 (и автоматической настройки всех ВПЛ). Похоже, что omniauth-saml не поддерживает спецификацию метаданных SAML, поэтому альтернативой является какой-то прокси-сервер SAML.

0

Использование нескольких SAML ВПЛ Devise + 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, добавить названные действия first и second в вместо saml, как предложено в официальный гид.

  3. В вашей User модели:

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

Если все настроено правильно, то теперь ваш SP настроен на двух ВПЛ.