diff --git a/lib/omniauth/strategies/saml.rb b/lib/omniauth/strategies/saml.rb index bbee4af..75d84e0 100644 --- a/lib/omniauth/strategies/saml.rb +++ b/lib/omniauth/strategies/saml.rb @@ -30,15 +30,26 @@ def self.inherited(subclass) option :slo_default_relay_state option :uid_attribute option :idp_slo_session_destroy, proc { |_env, session| session.clear } + option :store_request_uuid def request_phase authn_request = OneLogin::RubySaml::Authrequest.new + store_request_uuid(authn_request.uuid) + with_settings do |settings| redirect(authn_request.create(settings, additional_params_for_authn_request)) end end + def store_request_uuid(uuid) + if options.store_request_uuid.respond_to?(:call) + options.store_request_uuid.call(uuid) + elsif options.store_request_uuid + session["saml_transaction_id"] = uuid + end + end + def callback_phase raise OmniAuth::Strategies::SAML::ValidationError.new("SAML response missing") unless request.params["SAMLResponse"]