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

Rails中的Omniauth-saml:未找到 /auth/saml/元数据的路由错误

燕经国
2023-03-14

我在Rails(3.2.1)中有一个路由问题。

我正在使用omniauth saml进行身份验证(https://github.com/PracticallyGreen/omniauth-saml). 医生说:

“用于简化IdP中SAML SP配置的服务提供商元数据可以从http://example.com/auth/saml/metadata.将此URL发送给IdP的管理员。"

当我转到我的服务器时。com/auth/saml/metadata,我得到一个路由错误(没有路由匹配)。路线中唯一相关的路线。rb为/auth/:提供程序/回调。我需要添加什么路径才能访问元数据URL?

身份验证本身正在按预期工作。我只是元数据有问题。

非常感谢!

共有1个答案

朱啸
2023-03-14

您可以通过向路由添加以下匹配器来生成元数据路由。rb*:

devise_scope :user do
  match "/users/auth/:action/metadata",
    constraints: { action: /saml/ },
    to: "omniauth_callbacks",
    as: :user_omniauth_metadata,
    via: [:get, :post]
end

导致以下路由(sans"(. form)"):

user_omniauth_metadata  GET|POST /users/auth/:action/metadata omniauth_callbacks#(?-mix:saml)

这是对标准omniauth路由的补充:

user_omniauth_authorize GET|POST /users/auth/:provider        omniauth_callbacks#passthru {:provider=>/saml/}
user_omniauth_callback  GET|POST /users/auth/:action/callback omniauth_callbacks#(?-mix:saml)

这是由于:

devise_for :users, controllers: { omniauth_callbacks: "omniauth_callbacks" }

注意:我在:user范围内使用designe执行此操作,但在范围之外,它看起来更像:

match( "/auth/:action/metadata",
  constraints: { action: /saml/ },
  to: "omniauth_callbacks",
  as: :omniauth_metadata,
  via: [:get, :post]
)

您还需要为“other\u phase”定义回调;e、 g.在SAML策略中添加以下内容

module OmniAuth
  module Strategies
    class Saml

      include OmniAuth::Strategy

      def other_phase
        if on_path?("#{request_path}/metadata")
          # omniauth does not set the strategy on the "other_phase"
          @env['omniauth.strategy'] ||= self
          setup_phase

          response = OneLogin::RubySaml::Metadata.new
          settings = OneLogin::RubySaml::Settings.new # set whatever params you want on this guy
          Rack::Response.new(response.generate(settings), 200,
                             { "Content-Type" => "application/xml" }).finish
        else
          call_app!
        end
      end
    end
  end
end
  • 我从这个方便的帖子中得到的匹配路线:http://answer.techwikihow.com/1312028/omniauth-rails-change-url.html
 类似资料:
  • 我正在尝试为我的Rails网站创建Google SAML SSO自定义应用程序集成。我正在使用omniauth saml gem。 但是,我真的很困惑在google saml idp设置期间需要在“服务提供商详细信息”下设置的“ACS URL”和“实体ID”。 我有几个问题: ACS URL应该是什么? 我的理解是:它应该是谷歌接收和发送SAML断言的URL。如果这是正确的,那么:assertio

  • 让我在这个问题的开头说,我是SAML的新手,几乎不了解它是如何工作的。 我正在使用gem和Rails 4应用程序来实现SSO。Rails应用程序充当服务提供商(SP)。为了测试我的设置,我创建了一个OneLogin开发者帐户,并使用以下属性设置了一个SAML测试连接器(IdP w/attr w/sign response): 设置页 观众:mysubdomain.onelogin.com 收件人:

  • 我需要一种使用omniauth saml将动态参数从SP发送到IDP的方法。要求有两个网站:网站1和网站2。网站1由另一个已经实施saml的团队控制。在我的网站上,我添加了一个按钮,点击它,我将向网站1发送请求。在请求的同时,我需要发送用户参数,如first\u name、last\u name、email 当我浏览文档时,我认为我需要利用 但我不确定如何通过它传递动态参数。在我之前的帖子中,有人

  • 在spring security saml中部署《快速入门指南》中的示例应用程序时,我不清楚站点元数据的导入错误: 元数据位于:是Internet2 shibboleth SP在组织中使用的签名元数据(许多SP数据,一些IdP),没有问题。 spring security saml的IdP元数据的预期格式是什么?

  • 我正在开发一个基于Java的web应用程序,在Tomcat服务器上使用Spring Security SAML实现SSO。此应用程序将扮演服务提供者的角色(SP)。检索此SP元数据的默认Spring URL是: 这样做很好,按预期返回元数据XML文件。但是,当我向web.xml添加DefaultServlet servlet-mappings时,我遇到了一个问题。甚至只是一些基本的东西:

  • 我正在尝试使用OpenProject OmniAuth SAML单点登录插件设置SSO(单点登录)与OpenProject的集成。我已经配置了相关的详细信息。生成元数据并向Shibboleth支持的IDP注册。该插件在openproject登录表单上显示了一个额外的登录按钮。单击它将正确重定向到IDP的登录页面。在提供凭据之后,它正确地重定向到我提到的AssertionConsumerServic