@@ -386,7 +386,7 @@ def add_response_signature(self, response_data, sign_algorithm=OneLogin_Saml2_Co
386386 return self .__build_signature (response_data , 'SAMLResponse' , sign_algorithm )
387387
388388 @staticmethod
389- def __build_sign_query (saml_data , relay_state , algorithm , saml_type ):
389+ def __build_sign_query (saml_data , relay_state , algorithm , saml_type , lowercase_urlencoding = False ):
390390 """
391391 Build sign query
392392
@@ -401,12 +401,14 @@ def __build_sign_query(saml_data, relay_state, algorithm, saml_type):
401401
402402 :param saml_type: The target URL the user should be redirected to
403403 :type saml_type: string SAMLRequest | SAMLResponse
404- """
405404
406- sign_data = ['%s=%s' % (saml_type , OneLogin_Saml2_Utils .escape_url (saml_data ))]
405+ :param lowercase_urlencoding: lowercase or no
406+ :type lowercase_urlencoding: boolean
407+ """
408+ sign_data = ['%s=%s' % (saml_type , OneLogin_Saml2_Utils .escape_url (saml_data , lowercase_urlencoding ))]
407409 if relay_state is not None :
408- sign_data .append ('RelayState=%s' % OneLogin_Saml2_Utils .escape_url (relay_state ))
409- sign_data .append ('SigAlg=%s' % OneLogin_Saml2_Utils .escape_url (algorithm ))
410+ sign_data .append ('RelayState=%s' % OneLogin_Saml2_Utils .escape_url (relay_state , lowercase_urlencoding ))
411+ sign_data .append ('SigAlg=%s' % OneLogin_Saml2_Utils .escape_url (algorithm , lowercase_urlencoding ))
410412 return '&' .join (sign_data )
411413
412414 def __build_signature (self , data , saml_type , sign_algorithm = OneLogin_Saml2_Constants .RSA_SHA1 ):
@@ -502,10 +504,15 @@ def __validate_signature(self, data, saml_type):
502504 if isinstance (sign_alg , bytes ):
503505 sign_alg = sign_alg .decode ('utf8' )
504506
507+ lowercase_urlencoding = False
508+ if 'lowercase_urlencoding' in self .__request_data .keys ():
509+ lowercase_urlencoding = self .__request_data ['lowercase_urlencoding' ]
510+
505511 signed_query = self .__build_sign_query (data [saml_type ],
506512 data .get ('RelayState' , None ),
507513 sign_alg ,
508- saml_type )
514+ saml_type ,
515+ )
509516
510517 if not OneLogin_Saml2_Utils .validate_binary_sign (signed_query ,
511518 OneLogin_Saml2_Utils .b64decode (signature ),
0 commit comments