@@ -77,11 +77,15 @@ def is_valid(self, request_data, request_id=None):
7777 :rtype: boolean
7878 """
7979 self .__error = None
80+ lowercase_urlencoding = False
8081 try :
8182 idp_data = self .__settings .get_idp_data ()
8283 idp_entity_id = idp_data ['entityId' ]
8384 get_data = request_data ['get_data' ]
8485
86+ if 'lowercase_urlencoding' in request_data .keys ():
87+ lowercase_urlencoding = request_data ['lowercase_urlencoding' ]
88+
8589 if self .__settings .is_strict ():
8690 res = OneLogin_Saml2_Utils .validate_xml (self .document , 'saml-schema-protocol-2.0.xsd' , self .__settings .is_debug_active ())
8791 if not isinstance (res , Document ):
@@ -119,10 +123,10 @@ def is_valid(self, request_data, request_id=None):
119123 else :
120124 sign_alg = get_data ['SigAlg' ]
121125
122- signed_query = 'SAMLResponse=%s' % OneLogin_Saml2_Utils .get_encoded_parameter (get_data , 'SAMLResponse' )
126+ signed_query = 'SAMLResponse=%s' % OneLogin_Saml2_Utils .get_encoded_parameter (get_data , 'SAMLResponse' , lowercase_urlencoding = lowercase_urlencoding )
123127 if 'RelayState' in get_data :
124- signed_query = '%s&RelayState=%s' % (signed_query , OneLogin_Saml2_Utils .get_encoded_parameter (get_data , 'RelayState' ))
125- signed_query = '%s&SigAlg=%s' % (signed_query , OneLogin_Saml2_Utils .get_encoded_parameter (get_data , 'SigAlg' , OneLogin_Saml2_Constants .RSA_SHA1 ))
128+ signed_query = '%s&RelayState=%s' % (signed_query , OneLogin_Saml2_Utils .get_encoded_parameter (get_data , 'RelayState' , lowercase_urlencoding = lowercase_urlencoding ))
129+ signed_query = '%s&SigAlg=%s' % (signed_query , OneLogin_Saml2_Utils .get_encoded_parameter (get_data , 'SigAlg' , OneLogin_Saml2_Constants .RSA_SHA1 , lowercase_urlencoding = lowercase_urlencoding ))
126130
127131 if 'x509cert' not in idp_data or idp_data ['x509cert' ] is None :
128132 raise Exception ('In order to validate the sign on the Logout Response, the x509cert of the IdP is required' )
0 commit comments