|
@@ -18,6 +18,8 @@ package org.springframework.security.oauth2.server.authorization.authentication;
|
|
import java.util.Set;
|
|
import java.util.Set;
|
|
import java.util.function.Consumer;
|
|
import java.util.function.Consumer;
|
|
|
|
|
|
|
|
+import org.apache.commons.logging.Log;
|
|
|
|
+import org.apache.commons.logging.LogFactory;
|
|
import org.springframework.security.core.Authentication;
|
|
import org.springframework.security.core.Authentication;
|
|
import org.springframework.security.oauth2.core.OAuth2Error;
|
|
import org.springframework.security.oauth2.core.OAuth2Error;
|
|
import org.springframework.security.oauth2.core.OAuth2ErrorCodes;
|
|
import org.springframework.security.oauth2.core.OAuth2ErrorCodes;
|
|
@@ -48,17 +50,18 @@ import org.springframework.web.util.UriComponentsBuilder;
|
|
public final class OAuth2AuthorizationCodeRequestAuthenticationValidator implements Consumer<OAuth2AuthorizationCodeRequestAuthenticationContext> {
|
|
public final class OAuth2AuthorizationCodeRequestAuthenticationValidator implements Consumer<OAuth2AuthorizationCodeRequestAuthenticationContext> {
|
|
private static final String ERROR_URI = "https://datatracker.ietf.org/doc/html/rfc6749#section-4.1.2.1";
|
|
private static final String ERROR_URI = "https://datatracker.ietf.org/doc/html/rfc6749#section-4.1.2.1";
|
|
|
|
|
|
|
|
+ private final Log logger = LogFactory.getLog(getClass());
|
|
/**
|
|
/**
|
|
* The default validator for {@link OAuth2AuthorizationCodeRequestAuthenticationToken#getScopes()}.
|
|
* The default validator for {@link OAuth2AuthorizationCodeRequestAuthenticationToken#getScopes()}.
|
|
*/
|
|
*/
|
|
- public static final Consumer<OAuth2AuthorizationCodeRequestAuthenticationContext> DEFAULT_SCOPE_VALIDATOR =
|
|
|
|
- OAuth2AuthorizationCodeRequestAuthenticationValidator::validateScope;
|
|
|
|
|
|
+ public final Consumer<OAuth2AuthorizationCodeRequestAuthenticationContext> DEFAULT_SCOPE_VALIDATOR =
|
|
|
|
+ this::validateScope;
|
|
|
|
|
|
/**
|
|
/**
|
|
* The default validator for {@link OAuth2AuthorizationCodeRequestAuthenticationToken#getRedirectUri()}.
|
|
* The default validator for {@link OAuth2AuthorizationCodeRequestAuthenticationToken#getRedirectUri()}.
|
|
*/
|
|
*/
|
|
- public static final Consumer<OAuth2AuthorizationCodeRequestAuthenticationContext> DEFAULT_REDIRECT_URI_VALIDATOR =
|
|
|
|
- OAuth2AuthorizationCodeRequestAuthenticationValidator::validateRedirectUri;
|
|
|
|
|
|
+ public final Consumer<OAuth2AuthorizationCodeRequestAuthenticationContext> DEFAULT_REDIRECT_URI_VALIDATOR =
|
|
|
|
+ this::validateRedirectUri;
|
|
|
|
|
|
private final Consumer<OAuth2AuthorizationCodeRequestAuthenticationContext> authenticationValidator =
|
|
private final Consumer<OAuth2AuthorizationCodeRequestAuthenticationContext> authenticationValidator =
|
|
DEFAULT_REDIRECT_URI_VALIDATOR.andThen(DEFAULT_SCOPE_VALIDATOR);
|
|
DEFAULT_REDIRECT_URI_VALIDATOR.andThen(DEFAULT_SCOPE_VALIDATOR);
|
|
@@ -68,7 +71,7 @@ public final class OAuth2AuthorizationCodeRequestAuthenticationValidator impleme
|
|
this.authenticationValidator.accept(authenticationContext);
|
|
this.authenticationValidator.accept(authenticationContext);
|
|
}
|
|
}
|
|
|
|
|
|
- private static void validateScope(OAuth2AuthorizationCodeRequestAuthenticationContext authenticationContext) {
|
|
|
|
|
|
+ private void validateScope(OAuth2AuthorizationCodeRequestAuthenticationContext authenticationContext) {
|
|
OAuth2AuthorizationCodeRequestAuthenticationToken authorizationCodeRequestAuthentication =
|
|
OAuth2AuthorizationCodeRequestAuthenticationToken authorizationCodeRequestAuthentication =
|
|
authenticationContext.getAuthentication();
|
|
authenticationContext.getAuthentication();
|
|
RegisteredClient registeredClient = authenticationContext.getRegisteredClient();
|
|
RegisteredClient registeredClient = authenticationContext.getRegisteredClient();
|
|
@@ -76,12 +79,13 @@ public final class OAuth2AuthorizationCodeRequestAuthenticationValidator impleme
|
|
Set<String> requestedScopes = authorizationCodeRequestAuthentication.getScopes();
|
|
Set<String> requestedScopes = authorizationCodeRequestAuthentication.getScopes();
|
|
Set<String> allowedScopes = registeredClient.getScopes();
|
|
Set<String> allowedScopes = registeredClient.getScopes();
|
|
if (!requestedScopes.isEmpty() && !allowedScopes.containsAll(requestedScopes)) {
|
|
if (!requestedScopes.isEmpty() && !allowedScopes.containsAll(requestedScopes)) {
|
|
|
|
+ logDebugMessage("Invalid scope");
|
|
throwError(OAuth2ErrorCodes.INVALID_SCOPE, OAuth2ParameterNames.SCOPE,
|
|
throwError(OAuth2ErrorCodes.INVALID_SCOPE, OAuth2ParameterNames.SCOPE,
|
|
authorizationCodeRequestAuthentication, registeredClient);
|
|
authorizationCodeRequestAuthentication, registeredClient);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- private static void validateRedirectUri(OAuth2AuthorizationCodeRequestAuthenticationContext authenticationContext) {
|
|
|
|
|
|
+ private void validateRedirectUri(OAuth2AuthorizationCodeRequestAuthenticationContext authenticationContext) {
|
|
OAuth2AuthorizationCodeRequestAuthenticationToken authorizationCodeRequestAuthentication =
|
|
OAuth2AuthorizationCodeRequestAuthenticationToken authorizationCodeRequestAuthentication =
|
|
authenticationContext.getAuthentication();
|
|
authenticationContext.getAuthentication();
|
|
RegisteredClient registeredClient = authenticationContext.getRegisteredClient();
|
|
RegisteredClient registeredClient = authenticationContext.getRegisteredClient();
|
|
@@ -124,6 +128,7 @@ public final class OAuth2AuthorizationCodeRequestAuthenticationValidator impleme
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (!validRedirectUri) {
|
|
if (!validRedirectUri) {
|
|
|
|
+ logDebugMessage("Invalid redirect_uri");
|
|
throwError(OAuth2ErrorCodes.INVALID_REQUEST, OAuth2ParameterNames.REDIRECT_URI,
|
|
throwError(OAuth2ErrorCodes.INVALID_REQUEST, OAuth2ParameterNames.REDIRECT_URI,
|
|
authorizationCodeRequestAuthentication, registeredClient);
|
|
authorizationCodeRequestAuthentication, registeredClient);
|
|
}
|
|
}
|
|
@@ -196,4 +201,10 @@ public final class OAuth2AuthorizationCodeRequestAuthenticationValidator impleme
|
|
throw new OAuth2AuthorizationCodeRequestAuthenticationException(error, authorizationCodeRequestAuthenticationResult);
|
|
throw new OAuth2AuthorizationCodeRequestAuthenticationException(error, authorizationCodeRequestAuthenticationResult);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ private void logDebugMessage(String logMessage){
|
|
|
|
+ if(this.logger.isDebugEnabled()){
|
|
|
|
+ this.logger.debug(logMessage);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
}
|
|
}
|