Rails - 将omniauth-saml 与多个IDP 一起使用

问题描述 投票:0回答:5

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

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

ruby-on-rails devise omniauth saml
5个回答
6
投票

您可以在数据库中存储每个提供程序的设置,然后在请求时在设置阶段配置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 了解更多信息。


5
投票

将多个 SAML IDP 与 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]
    

如果所有配置均正确,您现在已为两个 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

0
投票

如果在联合上下文中使用应用程序,很可能会存在元数据源,例如 saml2int.org 配置文件中规定的元数据源。此元数据包含用于填充 IDP 发现(并自动配置所有 IDP)的数据。看来omniauth-saml不支持SAML元数据规范,因此某种SAML代理是替代方案。


-3
投票

这个 gem 解决了 SAML 以及其他提供商类型的问题:https://rubygems.org/gems/omniauth-multi-provider/

© www.soinside.com 2019 - 2024. All rights reserved.