diff --git a/pom.xml b/pom.xml index dd7111e..98bf9ec 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ ee.ria.tara tara-server war - 1.4.7 + 1.4.8 5.3.9 @@ -138,7 +138,7 @@ com.fasterxml.jackson.core jackson-databind - 2.9.8 + 2.9.9 diff --git a/src/main/java/ee/ria/sso/oidc/OidcAuthorizeRequestValidationServletFilter.java b/src/main/java/ee/ria/sso/oidc/OidcAuthorizeRequestValidationServletFilter.java index 43528d8..e3464c5 100644 --- a/src/main/java/ee/ria/sso/oidc/OidcAuthorizeRequestValidationServletFilter.java +++ b/src/main/java/ee/ria/sso/oidc/OidcAuthorizeRequestValidationServletFilter.java @@ -14,13 +14,14 @@ import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; -import java.nio.charset.StandardCharsets; import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Objects; import java.util.stream.Collectors; +import static java.nio.charset.StandardCharsets.UTF_8; + @Slf4j @AllArgsConstructor public class OidcAuthorizeRequestValidationServletFilter implements Filter { @@ -62,11 +63,11 @@ private String getRedirectUrlToRelyingParty(HttpServletRequest request, OidcAuth StringBuilder sb = new StringBuilder(); sb.append(redirectUri); sb.append(redirectUri.contains("?") ? "&" : "?"); - sb.append(String.format("error=%s", URLEncoder.encode(e.getErrorCode(), StandardCharsets.UTF_8.name()))); - sb.append(String.format("&error_description=%s", URLEncoder.encode(e.getErrorDescription(), StandardCharsets.UTF_8.name()))); + sb.append(String.format("error=%s", URLEncoder.encode(e.getErrorCode(), UTF_8.name()))); + sb.append(String.format("&error_description=%s", URLEncoder.encode(e.getErrorDescription(), UTF_8.name()))); String state = request.getParameter(OidcAuthorizeRequestParameter.STATE.getParameterKey()); if (StringUtils.isNotBlank(state)) { - sb.append(String.format("&state=%s", state)); + sb.append(String.format("&state=%s", URLEncoder.encode(state, UTF_8.name()))); } return sb.toString(); diff --git a/src/main/webapp/WEB-INF/classes/templates/fragments/head.html b/src/main/webapp/WEB-INF/classes/templates/fragments/head.html index 9416f9d..b018185 100644 --- a/src/main/webapp/WEB-INF/classes/templates/fragments/head.html +++ b/src/main/webapp/WEB-INF/classes/templates/fragments/head.html @@ -1,7 +1,7 @@ - + diff --git a/src/test/java/ee/ria/sso/oidc/OidcAuthorizeRequestValidationServletFilterTest.java b/src/test/java/ee/ria/sso/oidc/OidcAuthorizeRequestValidationServletFilterTest.java index ebd99f5..84c96bd 100644 --- a/src/test/java/ee/ria/sso/oidc/OidcAuthorizeRequestValidationServletFilterTest.java +++ b/src/test/java/ee/ria/sso/oidc/OidcAuthorizeRequestValidationServletFilterTest.java @@ -225,7 +225,7 @@ private void assertExceptionThrownWhenParameterValidationFails(OidcAuthorizeRequ private void assertRedirectWhenParameterValidationFails(String redirectUri, String expectedDelimiter, OidcAuthorizeRequestParameter... parameters) throws IOException, ServletException { MockHttpServletRequest servletRequest = new MockHttpServletRequest(); servletRequest.addParameter("redirect_uri", redirectUri); - servletRequest.addParameter("state", "123456789abcdefghjiklmn"); + servletRequest.addParameter("state", "123456789abcdefghjiklmn&additional=1"); for (OidcAuthorizeRequestParameter parameter : parameters) { Mockito.doThrow(new OidcAuthorizeRequestValidator.InvalidRequestException(parameter, "test", "test description")).when(oidcRequestValidator).validateAuthenticationRequestParameters(Mockito.any()); @@ -234,7 +234,7 @@ private void assertRedirectWhenParameterValidationFails(String redirectUri, Stri servletFilter.doFilter(servletRequest, servletResponse, Mockito.mock(FilterChain.class)); Assert.assertEquals(302, servletResponse.getStatus()); - Assert.assertEquals(redirectUri + expectedDelimiter + "error=test&error_description=test+description&state=123456789abcdefghjiklmn", servletResponse.getRedirectedUrl()); + Assert.assertEquals(redirectUri + expectedDelimiter + "error=test&error_description=test+description&state=123456789abcdefghjiklmn%26additional%3D1", servletResponse.getRedirectedUrl()); } }