@@ -107,29 +107,57 @@ class SloLogoutresponseTest < Minitest::Test
107107 end
108108 end
109109
110- describe "when the settings indicate to sign the logout response" do
111- it "create a signature parameter" do
112- settings = OneLogin ::RubySaml ::Settings . new
113- settings . compress_response = false
114- settings . idp_slo_target_url = "http://example.com?field=value"
115- settings . assertion_consumer_service_binding = "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST-SimpleSign"
116- settings . security [ :logout_responses_signed ] = true
117- settings . security [ :embed_sign ] = false
110+ describe "#create_params when the settings indicate to sign the logout response" do
111+ def setup
112+ @settings = OneLogin ::RubySaml ::Settings . new
113+ @settings . compress_response = false
114+ @settings . idp_slo_target_url = "http://example.com?field=value"
115+ @settings . assertion_consumer_service_binding = "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST-SimpleSign"
116+ @settings . security [ :logout_responses_signed ] = true
117+ @settings . security [ :embed_sign ] = false
118+ @settings . certificate = ruby_saml_cert_text
119+ @settings . private_key = ruby_saml_key_text
120+ @cert = OpenSSL ::X509 ::Certificate . new ( ruby_saml_cert_text )
121+ @request = OneLogin ::RubySaml ::SloLogoutrequest . new ( logout_request_document )
122+ end
123+
124+ it "create a signature parameter with RSA_SHA1 and validate it" do
118125 settings . security [ :signature_method ] = XMLSecurity ::Document ::RSA_SHA1
119- settings . certificate = ruby_saml_cert_text
120- settings . private_key = ruby_saml_key_text
121126
122- request = OneLogin ::RubySaml ::SloLogoutrequest . new ( logout_request_document )
123- params = OneLogin ::RubySaml ::SloLogoutresponse . new . create_params ( settings , request . id , "Custom Logout Message" )
127+ params = OneLogin ::RubySaml ::SloLogoutresponse . new . create_params ( @settings , @request . id , "Custom Logout Message" , :RelayState => 'http://example.com' )
128+ assert params [ 'SAMLResponse' ]
129+ assert params [ :RelayState ]
124130 assert params [ 'Signature' ]
125131 assert_equal params [ 'SigAlg' ] , XMLSecurity ::Document ::RSA_SHA1
126132
127- # signature_method only affects the embedeed signature
128- settings . security [ :signature_method ] = XMLSecurity ::Document ::SHA256
129- params = OneLogin ::RubySaml ::SloLogoutresponse . new . create_params ( settings , request . id , "Custom Logout Message" )
133+ query_string = "SAMLResponse=#{ CGI . escape ( params [ 'SAMLResponse' ] ) } "
134+ query_string << "&RelayState=#{ CGI . escape ( params [ :RelayState ] ) } "
135+ query_string << "&SigAlg=#{ CGI . escape ( params [ 'SigAlg' ] ) } "
136+
137+ signature_algorithm = XMLSecurity ::BaseDocument . new . algorithm ( params [ 'SigAlg' ] )
138+ assert_equal signature_algorithm , OpenSSL ::Digest ::SHA1
139+ assert @cert . public_key . verify ( signature_algorithm . new , Base64 . decode64 ( params [ 'Signature' ] ) , query_string )
140+ end
141+
142+ it "create a signature parameter with RSA_SHA256 and validate it" do
143+ @settings . security [ :signature_method ] = XMLSecurity ::Document ::RSA_SHA256
144+
145+ params = OneLogin ::RubySaml ::SloLogoutresponse . new . create_params ( @settings , @request . id , "Custom Logout Message" , :RelayState => 'http://example.com' )
146+ assert params [ 'SAMLResponse' ]
147+ assert params [ :RelayState ]
130148 assert params [ 'Signature' ]
131- assert_equal params [ 'SigAlg' ] , XMLSecurity ::Document ::RSA_SHA1
149+
150+ assert_equal params [ 'SigAlg' ] , XMLSecurity ::Document ::RSA_SHA256
151+
152+ query_string = "SAMLResponse=#{ CGI . escape ( params [ 'SAMLResponse' ] ) } "
153+ query_string << "&RelayState=#{ CGI . escape ( params [ :RelayState ] ) } "
154+ query_string << "&SigAlg=#{ CGI . escape ( params [ 'SigAlg' ] ) } "
155+
156+ signature_algorithm = XMLSecurity ::BaseDocument . new . algorithm ( params [ 'SigAlg' ] )
157+ assert_equal signature_algorithm , OpenSSL ::Digest ::SHA256
158+ assert @cert . public_key . verify ( signature_algorithm . new , Base64 . decode64 ( params [ 'Signature' ] ) , query_string )
132159 end
160+
133161 end
134162 end
135163end
0 commit comments