ruby-on-rails - 使用 omniauth-saml 发送动态参数
问题描述
我需要一种使用从 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
解决方案
您可以通过中间件适配器传递动态值。像:
应用程序/服务/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
推荐阅读
- macos - 如何在现有窗口中以模态方式显示自定义视图?
- vim - Vim autocmd 适用于 FocusGained 但不适用于 BufWritePost
- php - Wordpress 自定义主题:无法在自定义程序中配置小部件区域
- angularjs - 在 Angular 引导的 MVC 应用程序中有条件地渲染 MVC 包
- javascript - jQuery 光滑宽度扩展太多
- karate - 使用 Excel 中的数据覆盖空手道特征文件中的示例
- javascript - 防止输入中的特殊字符和重音符号 (´`¨^~) (jQuery)
- multithreading - 如何在 Spark Executor 中关闭内核之间的共享单例连接
- sql - Stored procedure with select as parameter
- android - 从 backstack 中删除 Fragment 并显示活动