【问题标题】:Send Dynamic params with omniauth-saml使用 omniauth-saml 发送动态参数
【发布时间】:2021-09-15 09:58:15
【问题描述】:

我需要一种使用从 SP 到 IDP 的omniauth-saml 发送动态参数的方法。要求是有 2 个网站网站 1 和网站 2。网站 1 由另一个已经实施 saml 的团队控制。在我的网站上,我添加了一个按钮,单击它,我将向网站 1 发送请求。除了请求,我还需要发送用户参数,例如名字、姓氏、电子邮件和一些自定义属性。在我之前的stackoverflow 帖子中,我能够理解我需要使用omniauth-saml 和一些基本细节。但是我仍然无法发送动态属性的问题。

当我浏览文档时,我认为我需要使用

:idp_sso_target_url_runtime_params  => {:original_request_param => :mapped_idp_param}, 

但我不确定如何通过它传递动态参数。在我之前的帖子中,有人推荐我做一个猴子补丁,但它对我不起作用。谁能给点建议

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :saml,
    #:assertion_consumer_service_url     => "consumer_service_url",
    :issuer                             => "my_application",
    :idp_sso_target_url                 => "target_url",
    :idp_sso_target_url_runtime_params  => {:original_request_param => :mapped_idp_param},
    :idp_cert                           => "-----BEGIN CERTIFICATE-----\n...-----END CERTIFICATE-----",
    :name_identifier_format             => "urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress"
end

【问题讨论】:

    标签: ruby-on-rails ruby saml ruby-on-rails-6 omniauth-saml


    【解决方案1】:

    您可以通过中间件适配器传递动态值。 喜欢:

    app/service/saml_idp_setting_adapter.rb

    class SamlIdpSettingAdapter
      def self.settings(issuer)
        idp = ::IdentityProvider.find_by_issuer(issuer)
        if idp.present?
          {
            assertion_consumer_service_url: "#{ENV['APP_URL']}/users/saml/auth",
            assertion_consumer_service_binding: 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST',
            name_identifier_format: 'urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress',
            issuer: "issuer",
            idp_entity_id: idp.entity_id,
            idp_slo_service_url: idp.slo_target_url,
            idp_sso_service_url: idp.sso_target_url,
            idp_cert_fingerprint: idp.cert_fingerprint,
            idp_cert_fingerprint_algorithm: 'http://www.w3.org/2000/09/xmldsig#sha256'
          }
        else
          {}
        end
      end
    end
    

    并使用上述适配器设置初始化文件

    Rails.application.config.middleware.use OmniAuth::Builder do
      provider :saml,
        :idp_settings_adapter => SamlIdpSettingAdapter
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-09
      • 2021-04-29
      • 1970-01-01
      • 1970-01-01
      • 2017-04-21
      相关资源
      最近更新 更多