1212
1313import javax .xml .xpath .XPathExpressionException ;
1414
15- import org .apache .commons .lang3 .StringUtils ;
1615import org .apache .commons .lang3 .text .StrSubstitutor ;
1716import org .joda .time .DateTime ;
1817import org .slf4j .Logger ;
@@ -61,11 +60,6 @@ public class LogoutRequest {
6160 */
6261 private final HttpRequest request ;
6362
64- /**
65- * Map with raw request parameters as received in the queryString. Required for accurate signature verification.
66- */
67- private Map <String , String > rawRequestParams ;
68-
6963 /**
7064 * NameID.
7165 */
@@ -98,19 +92,16 @@ public class LogoutRequest {
9892 * OneLogin_Saml2_Settings
9993 * @param request
10094 * the HttpRequest object to be processed (Contains GET and POST parameters, request URL, ...).
101- * @param rawRequestParams
102- * map with 'raw' url request parameters for signature validation (keyed on name, value is key & value)
10395 * @param nameId
10496 * The NameID that will be set in the LogoutRequest.
10597 * @param sessionIndex
10698 * The SessionIndex (taken from the SAML Response in the SSO process).
10799 * @throws XMLEntityException
108100 *
109101 */
110- public LogoutRequest (Saml2Settings settings , HttpRequest request , Map < String , String > rawRequestParams , String nameId , String sessionIndex ) throws XMLEntityException {
102+ public LogoutRequest (Saml2Settings settings , HttpRequest request , String nameId , String sessionIndex ) throws XMLEntityException {
111103 this .settings = settings ;
112104 this .request = request ;
113- this .rawRequestParams = rawRequestParams ;
114105
115106 String samlLogoutRequest = null ;
116107
@@ -142,7 +133,7 @@ public LogoutRequest(Saml2Settings settings, HttpRequest request, Map<String, St
142133 * @throws XMLEntityException
143134 */
144135 public LogoutRequest (Saml2Settings settings ) throws XMLEntityException {
145- this (settings , null , null , null , null );
136+ this (settings , null , null , null );
146137 }
147138
148139 /**
@@ -152,13 +143,11 @@ public LogoutRequest(Saml2Settings settings) throws XMLEntityException {
152143 * OneLogin_Saml2_Settings
153144 * @param request
154145 * the HttpRequest object to be processed (Contains GET and POST parameters, request URL, ...).
155- * @param rawRequestParams
156- * map with 'raw' url request parameters for signature validation (keyed on name, value is key & value)
157146 *
158147 * @throws XMLEntityException
159148 */
160- public LogoutRequest (Saml2Settings settings , HttpRequest request , Map < String , String > rawRequestParams ) throws XMLEntityException {
161- this (settings , request , rawRequestParams , null , null );
149+ public LogoutRequest (Saml2Settings settings , HttpRequest request ) throws XMLEntityException {
150+ this (settings , request , null , null );
162151 }
163152
164153 /**
@@ -345,19 +334,15 @@ public Boolean isValid() throws Exception {
345334 if (signAlg == null || signAlg .isEmpty ()) {
346335 signAlg = Constants .RSA_SHA1 ;
347336 }
348-
349- String rawSamlRequest = rawRequestParams .get ("SAMLRequest" );
350- String rawRelayState = rawRequestParams .get ("RelayState" );
351- String rawSigAlg = rawRequestParams .get ("SigAlg" );
352-
353- String signedQuery = "" ;
354- signedQuery += rawSamlRequest ;
355-
356- if (StringUtils .isNotBlank (rawRelayState )) {
357- signedQuery += "&" + rawRelayState ;
337+ String relayState = request .getParameter ("RelayState" );
338+
339+ String signedQuery = "SAMLRequest=" + Util .urlEncoder (request .getParameter ("SAMLRequest" ));
340+
341+ if (relayState != null && !relayState .isEmpty ()) {
342+ signedQuery += "&RelayState=" + Util .urlEncoder (relayState );
358343 }
359344
360- signedQuery += "&" + rawSigAlg ;
345+ signedQuery += "&SigAlg= " + Util . urlEncoder ( signAlg ) ;
361346
362347 if (!Util .validateBinarySignature (signedQuery , Util .base64decoder (signature ), cert , signAlg )) {
363348 throw new ValidationError ("Signature validation failed. Logout Request rejected" , ValidationError .INVALID_SIGNATURE );
0 commit comments