我最终想要的是能够通过设计正常登录或选择使用SAML登录。所以我读到如果我整合omniauth和saml,然后omniauth和devise,我就可以实现。
我的问题是,我有不同的国内流离失所者,我想选择。所以我没有一个:idp_sso_target_url,但很多。所以我的问题是如何动态更改target_url的值。目前omniauth-saml gem在config / initializers目录中定义了这个值..
谢谢,
答案 0 :(得分:4)
您可以在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。
答案 1 :(得分: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
答案 2 :(得分:2)
在Devise + OmniAuth中使用多个SAML IDP:
请遵循此IDP的官方指南。
https://github.com/omniauth/omniauth-saml#devise-integration
一旦您的SP使用单个IDP,请执行以下调整
在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'}
在Users::OmniauthCallbacksController
中,按官方指南中的建议添加名为first
和second
的操作,而不是saml
。
在User
模型中:
devise :omniauthable, omniauth_providers: [:first, :second]
如果所有配置都正确,您现在可以为两个IDP配置SP。
答案 3 :(得分:0)
如果在联合上下文中使用该应用程序,则很可能是元数据源,例如saml2int.org配置文件中规定的。此元数据具有填充IDP发现的数据(并自动配置所有IDP)。似乎omniauth-saml不支持SAML元数据规范,因此可以使用某种SAML代理。