Merge branch '1.1.x'
Closes gh-1318
This commit is contained in:
@@ -80,7 +80,7 @@ public final class OAuth2DeviceAuthorizationConsentAuthenticationConverter imple
|
||||
|
||||
// user_code (REQUIRED)
|
||||
String userCode = parameters.getFirst(OAuth2ParameterNames.USER_CODE);
|
||||
if (!StringUtils.hasText(userCode) ||
|
||||
if (!OAuth2EndpointUtils.validateUserCode(userCode) ||
|
||||
parameters.get(OAuth2ParameterNames.USER_CODE).size() != 1) {
|
||||
OAuth2EndpointUtils.throwError(
|
||||
OAuth2ErrorCodes.INVALID_REQUEST,
|
||||
|
||||
@@ -30,7 +30,6 @@ import org.springframework.security.oauth2.server.authorization.authentication.O
|
||||
import org.springframework.security.oauth2.server.authorization.web.OAuth2DeviceVerificationEndpointFilter;
|
||||
import org.springframework.security.web.authentication.AuthenticationConverter;
|
||||
import org.springframework.util.MultiValueMap;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
/**
|
||||
* Attempts to extract a user code from {@link HttpServletRequest} for the
|
||||
@@ -64,7 +63,7 @@ public final class OAuth2DeviceVerificationAuthenticationConverter implements Au
|
||||
|
||||
// user_code (REQUIRED)
|
||||
String userCode = parameters.getFirst(OAuth2ParameterNames.USER_CODE);
|
||||
if (!StringUtils.hasText(userCode) ||
|
||||
if (!OAuth2EndpointUtils.validateUserCode(userCode) ||
|
||||
parameters.get(OAuth2ParameterNames.USER_CODE).size() != 1) {
|
||||
OAuth2EndpointUtils.throwError(
|
||||
OAuth2ErrorCodes.INVALID_REQUEST,
|
||||
|
||||
@@ -95,4 +95,7 @@ final class OAuth2EndpointUtils {
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
static boolean validateUserCode(String userCode) {
|
||||
return (userCode != null && userCode.toUpperCase().replaceAll("[^A-Z\\d]+", "").length() == 8);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -147,6 +147,22 @@ public class OAuth2DeviceAuthorizationConsentAuthenticationConverterTests {
|
||||
// @formatter:on
|
||||
}
|
||||
|
||||
@Test
|
||||
public void convertWhenInvalidUserCodeThenInvalidRequestError() {
|
||||
MockHttpServletRequest request = createRequest();
|
||||
request.addParameter(OAuth2ParameterNames.STATE, STATE);
|
||||
request.addParameter(OAuth2ParameterNames.CLIENT_ID, CLIENT_ID);
|
||||
request.addParameter(OAuth2ParameterNames.USER_CODE, "LONG-USER-CODE");
|
||||
// @formatter:off
|
||||
assertThatExceptionOfType(OAuth2AuthenticationException.class)
|
||||
.isThrownBy(() -> this.converter.convert(request))
|
||||
.withMessageContaining(OAuth2ParameterNames.USER_CODE)
|
||||
.extracting(OAuth2AuthenticationException::getError)
|
||||
.extracting(OAuth2Error::getErrorCode)
|
||||
.isEqualTo(OAuth2ErrorCodes.INVALID_REQUEST);
|
||||
// @formatter:on
|
||||
}
|
||||
|
||||
@Test
|
||||
public void convertWhenMultipleUserCodeParametersThenInvalidRequestError() {
|
||||
MockHttpServletRequest request = createRequest();
|
||||
|
||||
@@ -94,6 +94,20 @@ public class OAuth2DeviceVerificationAuthenticationConverterTests {
|
||||
// @formatter:on
|
||||
}
|
||||
|
||||
@Test
|
||||
public void convertWhenInvalidUserCodeParameterThenInvalidRequestError() {
|
||||
MockHttpServletRequest request = createRequest();
|
||||
request.addParameter(OAuth2ParameterNames.USER_CODE, "LONG-USER-CODE");
|
||||
// @formatter:off
|
||||
assertThatExceptionOfType(OAuth2AuthenticationException.class)
|
||||
.isThrownBy(() -> this.converter.convert(request))
|
||||
.withMessageContaining(OAuth2ParameterNames.USER_CODE)
|
||||
.extracting(OAuth2AuthenticationException::getError)
|
||||
.extracting(OAuth2Error::getErrorCode)
|
||||
.isEqualTo(OAuth2ErrorCodes.INVALID_REQUEST);
|
||||
// @formatter:on
|
||||
}
|
||||
|
||||
@Test
|
||||
public void convertWhenMultipleUserCodeParameterThenInvalidRequestError() {
|
||||
MockHttpServletRequest request = createRequest();
|
||||
|
||||
Reference in New Issue
Block a user