0

我创建了一个 SAML2 SSO 登录(使用 google 断言消费者服务),如下所示:

require 'onelogin/ruby-saml'

class Saml
  class << self
    def init(provider, saml2_idp_url, saml2_issuer_url)
      request = OneLogin::RubySaml::Authrequest.new

      request.create(saml_settings)
    end

    def consume(params)
      OneLogin::RubySaml::Response.new(params[:SAMLResponse], :settings => saml_settings)
    end

    private

    def saml_settings
      idp_metadata_parser = OneLogin::RubySaml::IdpMetadataParser.new

      settings = idp_metadata_parser.parse( File.read("acs.xml") )

      settings.assertion_consumer_service_url = https://certedrive-dev1.ngrok.io/saml2/idp?idpid=xxxxxx
      settings.issuer                         = https://certedrive-dev1.ngrok.io/saml2?idpid=xxxxxx
      settings
    end
  end
end

但是,我无法使用 ACS 进行等效注销。

我试过了:

logout_req = OneLogin::RubySaml::Logoutrequest.new
logout_req_url = logout_req.create(saml_settings)

但是,这让我:

NoMethodError - nil:NilClass 的未定义方法“+”

我觉得我正在尝试的注销方法是错误的。发出注销请求的正确方法是什么?

4

1 回答 1

1

检查ruby​​-saml-example项目的代码。

logout方法处理 SP 和 IdP 发起的 SLO 流。

在您描述的用例中,我认为问题在于您没有在设置中定义idp_slo_target_url属性。在 ruby​​-saml-example 中,该问题在该中得到控制。

有关更多信息,请阅读 ruby​​-saml 的 README,即单次注销部分。

于 2017-07-22T04:03:55.637 回答