当前位置: 首页 > 知识库问答 >
问题:

我可以让IdP使用omniauth saml将参数转发回我的服务提供商吗?

欧阳俊晖
2023-03-14

我已经在Rails 4.2.0应用程序中使用omniauth SAML成功地设置了SAML身份验证。由于它是一个多租户应用程序,每个租户都可以定义自己的IdP,这很困难,但我做到了。

当IdP对用户进行身份验证后,IdP会将它们发送回我的应用程序,地址为/auth/saml/allback,这是omniauth的标准位置。只要我可以将用户发送到我的应用程序中的指定页面(例如仪表板),这一切都很好。

但是,如果用户试图访问特定页面并被发送到登录页面,该怎么办?如果用户正常登录(电子邮件/密码),rails应用程序会记住返回的url,并将用户发送回他们最初尝试去的地方。

对于omniauth saml,我不知道如何做到这一点。我的第一反应是向IdP发送一个return\uURL参数,以便IdP可以在身份验证时将其发送回。我有办法做到这一点吗?

共有1个答案

胡飞舟
2023-03-14

当我输入问题时,我想到了使用会话存储返回url的想法。因为我以前在任何地方都找不到答案,所以我想在这里与大家分享。

我让omniauth像这样使用我的设置阶段:

# config/initializers/omniauth.rb
provider :saml, setup: true

我让我的会话控制器处理它:

# config/routes.rb
get '/auth/:provider/setup' => 'sessions#sso_setup'

# controllers/sessions_controller.rb
def sso_setup
  session[:sso_return_url] = params[:return_url] if params[:return_url]
  # setup...
end

指定只有在设置了params[:return_url]时才应该设置会话值很重要-我发现sso_setup被调用了三次。第三次,return_url未设置。

当IdP回调我的SP时,我只需获取会话[:sso\u return\u url]的值。如果设置了,我知道在哪里重定向用户。

 类似资料:
  • 我们在 IIS 实例上安装了 Shibboleth SP3,它具有很好的 SSO 身份验证。 然而,我们希望向Azure(我们的IdP)传递一个login_hint参数,以减轻拥有多个帐户的人的负担。这样,如果他们还没有连接,登录就已经设置好了,他们只需要用他们的密码填写表单。 是否有办法将查询字符串参数从初始超文本传输协议请求传递给Idp? 例如,用户转到 https://sp.server.c

  • 我正在使用Keycloak作为我的应用程序的代理,它是由OIDC保护的。我有一些SAML2.0IDP和他们可以很好地验证当做SP启动的SSO时,但我想也能做IDP启动的SSO,例如直接从Okta或GSuite启动。我意识到如果客户机是SAML 2.0客户机,这是可能的,但我的客户机是OIDC。那么SAML 2.0 IDP启动到Keycloak中的OIDC客户端的SSO是否可能? 我要补充的是,我已

  • 所以我对web开发还是个新手,现在我和我的一个面向web的朋友开始了一个项目,他给了我各种各样的框架。我们在做Vuejs,jade,stylus和Jeet。对于一个新手来说,这当然是非常混乱的,因为没有Vuejs示例使用jade,没有jade示例使用Vuejs,等等。 然而,对于这个项目,我们需要一个可以处理对Google maps的api调用、保存东西等的后端。我们两个都没有这样做的经验,我尝试

  • 我正在使用jUnit为访问数据库的应用程序管理集成测试。因为设置测试数据是一个耗时的操作,所以我一直在使用方法,它只在每个测试类中执行一次(而不是方法,它在每个测试方法中运行一次)。 现在,我想尝试数据层配置的几种不同排列,在每个不同的配置上运行我的所有测试。这似乎是测试运行程序的自然使用。问题是,向类构造函数提供参数,方法是抽象的,在类构造函数之前被调用。 几个问题, 是否为每个参数排列调用方法

  • 问题内容: 我正在尝试使用以下方式提供SVG地图: 在Firefox中,这会导致插件提示。如果我重命名地图。svg映射。xml,它可以正确显示图像。我认为这是因为Django的开发服务器(特别是django.views.static.serve)没有为svg提供正确的mime类型。这是问题吗?如果是,是否有补丁? 问题答案: 我目前没有可用的Django来进行测试,但看起来静态服务器使用mimet

  • 问题内容: 很抱歉这个新手问题。node.js可以在任何托管提供商(如Fastdomain)中运行吗?我们在fastdomain中有一个帐户,我们在其中上传了用PHP制作的网站。我在主机中允许使用SSH,并尝试安装node.js,但无法正常工作。我一直在搜索互联网,但对此没有确切答案。 问题答案: 不,您不能在每个托管服务提供商上运行Node.js。您需要某些基本功能。如果您的托管服务提供商不像H