【问题标题】:Rails - Using omniauth-saml with multiple IDPsRails - 将omniauth-saml 与多个IDP 一起使用
【发布时间】:2013-08-18 09:30:14
【问题描述】:

我最终想要的是能够使用设计正常登录或选择使用 SAML 登录。所以我读到如果我整合omniauth和saml,然后omniauth和devise,我可以实现。

我的问题是,我有不同的 IDP 可供选择。所以我没有一个:idp_sso_target_url,但有很多。所以我的问题是如何动态更改 target_url 的值。目前,omniauth-saml gem 在 config/initializers 目录中定义了这个值。

谢谢,

【问题讨论】:

    标签: ruby-on-rails devise omniauth saml


    【解决方案1】:

    您可以将每个提供程序的设置存储在 db 中,然后在请求时在设置阶段配置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

    【讨论】:

      【解决方案2】:

      通过 Devise + OmniAuth 使用多个 SAML IDP:

      请遵循此单一 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]
        

      如果所有配置都正确,您现在已经为两个 IDP 配置了您的 SP。

      【讨论】:

        【解决方案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】:

          如果在联合上下文中使用应用程序,则很可能存在元数据源,例如 saml2int.org 配置文件中规定的。此元数据具有填充 IDP 发现的数据(并自动配置所有 IDP)。似乎omniauth-saml 不支持SAML 元数据规范,因此可以选择某种SAML 代理。

          【讨论】:

            猜你喜欢
            • 2018-12-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-11-08
            • 1970-01-01
            • 2019-02-17
            相关资源
            最近更新 更多