ruby-on-rails Rails -对多个IDP使用omniauth-saml

14ifxucb  于 12个月前  发布在  Ruby
关注(0)|答案(4)|浏览(108)

我最终想要的是使用devise正常登录或选择使用SAML登录的能力。所以我读到,如果我集成omniauth和saml,然后omniauth和devise,我就可以实现这一点。
我的问题是,我有不同的IDP,我想选择。所以我没有一个:idp_sso_target_url,但很多。所以我的问题是,我如何动态地改变目标_url的值。目前omniauth-saml gem在config/initializers目录中定义了这个值。

fhity93d

fhity93d1#

您可以将每个提供程序的设置存储在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了解更多信息。

tktrz96b

tktrz96b2#

通过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'}

字符串
1.在Users::OmniauthCallbacksController中,添加名为firstsecond的操作,而不是官方指南中建议的saml
1.在您的User型号中:

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


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

oyt4ldly

oyt4ldly3#

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

字符串

3j86kqsm

3j86kqsm4#

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

相关问题