Fix to save all values for multi-valued request parameters
Fixes gh-1250
This commit is contained in:
committed by
Joe Grandja
parent
4bb741b0ba
commit
890b1ef0ed
@@ -84,7 +84,7 @@ public final class OAuth2AuthorizationCodeAuthenticationConverter implements Aut
|
||||
!key.equals(OAuth2ParameterNames.CLIENT_ID) &&
|
||||
!key.equals(OAuth2ParameterNames.CODE) &&
|
||||
!key.equals(OAuth2ParameterNames.REDIRECT_URI)) {
|
||||
additionalParameters.put(key, value.get(0));
|
||||
additionalParameters.put(key, value.size() == 1 ? value.get(0) : value.toArray(new String[0]));
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -138,7 +138,7 @@ public final class OAuth2AuthorizationCodeRequestAuthenticationConverter impleme
|
||||
!key.equals(OAuth2ParameterNames.REDIRECT_URI) &&
|
||||
!key.equals(OAuth2ParameterNames.SCOPE) &&
|
||||
!key.equals(OAuth2ParameterNames.STATE)) {
|
||||
additionalParameters.put(key, value.get(0));
|
||||
additionalParameters.put(key, value.size() == 1 ? value.get(0) : value.toArray(new String[0]));
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -93,7 +93,7 @@ public final class OAuth2AuthorizationConsentAuthenticationConverter implements
|
||||
if (!key.equals(OAuth2ParameterNames.CLIENT_ID) &&
|
||||
!key.equals(OAuth2ParameterNames.STATE) &&
|
||||
!key.equals(OAuth2ParameterNames.SCOPE)) {
|
||||
additionalParameters.put(key, value.get(0));
|
||||
additionalParameters.put(key, value.size() == 1 ? value.get(0) : value.toArray(new String[0]));
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -79,7 +79,7 @@ public final class OAuth2ClientCredentialsAuthenticationConverter implements Aut
|
||||
parameters.forEach((key, value) -> {
|
||||
if (!key.equals(OAuth2ParameterNames.GRANT_TYPE) &&
|
||||
!key.equals(OAuth2ParameterNames.SCOPE)) {
|
||||
additionalParameters.put(key, value.get(0));
|
||||
additionalParameters.put(key, value.size() == 1 ? value.get(0) : value.toArray(new String[0]));
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -16,8 +16,8 @@
|
||||
package org.springframework.security.oauth2.server.authorization.web.authentication;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
|
||||
@@ -58,11 +58,13 @@ final class OAuth2EndpointUtils {
|
||||
if (!matchesAuthorizationCodeGrantRequest(request)) {
|
||||
return Collections.emptyMap();
|
||||
}
|
||||
Map<String, Object> parameters = new HashMap<>(getParameters(request).toSingleValueMap());
|
||||
MultiValueMap<String, String> parameters = getParameters(request);
|
||||
for (String exclusion : exclusions) {
|
||||
parameters.remove(exclusion);
|
||||
}
|
||||
return parameters;
|
||||
return parameters.entrySet().stream()
|
||||
.collect(Collectors.toMap(Map.Entry::getKey,
|
||||
e -> e.getValue().size() == 1 ? e.getValue().get(0) : e.getValue().toArray(new String[0])));
|
||||
}
|
||||
|
||||
static boolean matchesAuthorizationCodeGrantRequest(HttpServletRequest request) {
|
||||
|
||||
@@ -90,7 +90,7 @@ public final class OAuth2RefreshTokenAuthenticationConverter implements Authenti
|
||||
if (!key.equals(OAuth2ParameterNames.GRANT_TYPE) &&
|
||||
!key.equals(OAuth2ParameterNames.REFRESH_TOKEN) &&
|
||||
!key.equals(OAuth2ParameterNames.SCOPE)) {
|
||||
additionalParameters.put(key, value.get(0));
|
||||
additionalParameters.put(key, value.size() == 1 ? value.get(0) : value.toArray(new String[0]));
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -69,7 +69,7 @@ public final class OAuth2TokenIntrospectionAuthenticationConverter implements Au
|
||||
parameters.forEach((key, value) -> {
|
||||
if (!key.equals(OAuth2ParameterNames.TOKEN) &&
|
||||
!key.equals(OAuth2ParameterNames.TOKEN_TYPE_HINT)) {
|
||||
additionalParameters.put(key, value.get(0));
|
||||
additionalParameters.put(key, value.size() == 1 ? value.get(0) : value.toArray(new String[0]));
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
package org.springframework.security.oauth2.server.authorization.web.authentication;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
|
||||
@@ -68,7 +69,12 @@ public final class PublicClientAuthenticationConverter implements Authentication
|
||||
|
||||
parameters.remove(OAuth2ParameterNames.CLIENT_ID);
|
||||
|
||||
Map<String, Object> additionalParameters = new HashMap<>();
|
||||
parameters.forEach((key, value) -> {
|
||||
additionalParameters.put(key, value.size() == 1 ? value.get(0) : value.toArray(new String[0]));
|
||||
});
|
||||
|
||||
return new OAuth2ClientAuthenticationToken(clientId, ClientAuthenticationMethod.NONE, null,
|
||||
new HashMap<>(parameters.toSingleValueMap()));
|
||||
additionalParameters);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user