我创建了SAML2 SSO登录(使用谷歌断言消费者服务),如下所示:
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 - 未定义的方法`+&#39;为零:NilClass
我觉得我尝试的Logout方法是错误的。发出退出请求的正确方法是什么?
答案 0 :(得分:1)
检查ruby-saml-example项目的代码。
logout方法处理SP和IdP启动的SLO流程。
在您正在描述的用例中,我认为问题是您尚未在设置中定义idp_slo_target_url属性。 在ruby-saml示例中,该问题由line控制。
欲了解更多信息,请阅读ruby-saml的README,single-log-out部分。