diff --git a/lib/saml/bindings/http_redirect.rb b/lib/saml/bindings/http_redirect.rb index 58f5b90..8b178e4 100644 --- a/lib/saml/bindings/http_redirect.rb +++ b/lib/saml/bindings/http_redirect.rb @@ -14,6 +14,11 @@ def receive_message(http_request, options = {}) options[:signature_algorithm] = http_request.params["SigAlg"] options[:relay_state] = http_request.params["RelayState"] + receive_xml = http_request.params["SAMLRequest"] || http_request.params["SAMLResponse"] + if receive_xml.nil? + raise Saml::Errors::InvalidParams, 'require params `SAMLRequest` or `SAMLResponse`' + end + request_or_response = parse_request_or_response(options.delete(:type), http_request.params) redirect_binding = new(request_or_response, options) diff --git a/spec/lib/saml/bindings/http_redirect_spec.rb b/spec/lib/saml/bindings/http_redirect_spec.rb index 6d634d1..dcc9de1 100644 --- a/spec/lib/saml/bindings/http_redirect_spec.rb +++ b/spec/lib/saml/bindings/http_redirect_spec.rb @@ -190,5 +190,13 @@ def get_url(request = authn_request) end end end + + context 'When both `SAMLRequest` and `SAMLResponse` is nil in request params' do + let(:request) { double(:request, params: {}, url: url) } + + it 'Raise Saml::Errors::InvalidParams' do + expect{ described_class.receive_message(request, type: :authn_request) }.to raise_error(Saml::Errors::InvalidParams, 'require params `SAMLRequest` or `SAMLResponse`') + end + end end end