diff --git a/oauth2-authorization-server/src/main/java/org/springframework/security/oauth2/server/authorization/authentication/ClientSecretAuthenticationProvider.java b/oauth2-authorization-server/src/main/java/org/springframework/security/oauth2/server/authorization/authentication/ClientSecretAuthenticationProvider.java index b71065210..d19e92a03 100644 --- a/oauth2-authorization-server/src/main/java/org/springframework/security/oauth2/server/authorization/authentication/ClientSecretAuthenticationProvider.java +++ b/oauth2-authorization-server/src/main/java/org/springframework/security/oauth2/server/authorization/authentication/ClientSecretAuthenticationProvider.java @@ -114,6 +114,9 @@ public Authentication authenticate(Authentication authentication) throws Authent String clientSecret = clientAuthentication.getCredentials().toString(); if (!this.passwordEncoder.matches(clientSecret, registeredClient.getClientSecret())) { + if(this.logger.isDebugEnabled()){ + this.logger.debug("Invalid client_secret"); + } throwInvalidClient(OAuth2ParameterNames.CLIENT_SECRET); } diff --git a/oauth2-authorization-server/src/main/java/org/springframework/security/oauth2/server/authorization/authentication/CodeVerifierAuthenticator.java b/oauth2-authorization-server/src/main/java/org/springframework/security/oauth2/server/authorization/authentication/CodeVerifierAuthenticator.java index 98a577ee6..61f769d25 100644 --- a/oauth2-authorization-server/src/main/java/org/springframework/security/oauth2/server/authorization/authentication/CodeVerifierAuthenticator.java +++ b/oauth2-authorization-server/src/main/java/org/springframework/security/oauth2/server/authorization/authentication/CodeVerifierAuthenticator.java @@ -96,6 +96,7 @@ private boolean authenticate(OAuth2ClientAuthenticationToken clientAuthenticatio .get(PkceParameterNames.CODE_CHALLENGE); if (!StringUtils.hasText(codeChallenge)) { if (registeredClient.getClientSettings().isRequireProofKey()) { + logDebugMessage("Missing code_challenge"); throwInvalidGrant(PkceParameterNames.CODE_CHALLENGE); } else { if (this.logger.isTraceEnabled()) { @@ -129,8 +130,9 @@ private static boolean authorizationCodeGrant(Map parameters) { parameters.get(OAuth2ParameterNames.CODE) != null; } - private static boolean codeVerifierValid(String codeVerifier, String codeChallenge, String codeChallengeMethod) { + private boolean codeVerifierValid(String codeVerifier, String codeChallenge, String codeChallengeMethod) { if (!StringUtils.hasText(codeVerifier)) { + logDebugMessage("Missing code_verifier"); return false; } else if ("S256".equals(codeChallengeMethod)) { try { @@ -156,4 +158,9 @@ private static void throwInvalidGrant(String parameterName) { throw new OAuth2AuthenticationException(error); } + private void logDebugMessage(String logMessage){ + if(this.logger.isDebugEnabled()){ + this.logger.debug(logMessage); + } + } } diff --git a/oauth2-authorization-server/src/main/java/org/springframework/security/oauth2/server/authorization/authentication/OAuth2AuthorizationCodeRequestAuthenticationValidator.java b/oauth2-authorization-server/src/main/java/org/springframework/security/oauth2/server/authorization/authentication/OAuth2AuthorizationCodeRequestAuthenticationValidator.java index 2c8dc2ad0..168106e56 100644 --- a/oauth2-authorization-server/src/main/java/org/springframework/security/oauth2/server/authorization/authentication/OAuth2AuthorizationCodeRequestAuthenticationValidator.java +++ b/oauth2-authorization-server/src/main/java/org/springframework/security/oauth2/server/authorization/authentication/OAuth2AuthorizationCodeRequestAuthenticationValidator.java @@ -18,6 +18,8 @@ import java.util.Set; 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.oauth2.core.OAuth2Error; import org.springframework.security.oauth2.core.OAuth2ErrorCodes; @@ -48,17 +50,18 @@ public final class OAuth2AuthorizationCodeRequestAuthenticationValidator implements Consumer { 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()}. */ - public static final Consumer DEFAULT_SCOPE_VALIDATOR = - OAuth2AuthorizationCodeRequestAuthenticationValidator::validateScope; + public final Consumer DEFAULT_SCOPE_VALIDATOR = + this::validateScope; /** * The default validator for {@link OAuth2AuthorizationCodeRequestAuthenticationToken#getRedirectUri()}. */ - public static final Consumer DEFAULT_REDIRECT_URI_VALIDATOR = - OAuth2AuthorizationCodeRequestAuthenticationValidator::validateRedirectUri; + public final Consumer DEFAULT_REDIRECT_URI_VALIDATOR = + this::validateRedirectUri; private final Consumer authenticationValidator = DEFAULT_REDIRECT_URI_VALIDATOR.andThen(DEFAULT_SCOPE_VALIDATOR); @@ -68,7 +71,7 @@ public void accept(OAuth2AuthorizationCodeRequestAuthenticationContext authentic this.authenticationValidator.accept(authenticationContext); } - private static void validateScope(OAuth2AuthorizationCodeRequestAuthenticationContext authenticationContext) { + private void validateScope(OAuth2AuthorizationCodeRequestAuthenticationContext authenticationContext) { OAuth2AuthorizationCodeRequestAuthenticationToken authorizationCodeRequestAuthentication = authenticationContext.getAuthentication(); RegisteredClient registeredClient = authenticationContext.getRegisteredClient(); @@ -76,12 +79,13 @@ private static void validateScope(OAuth2AuthorizationCodeRequestAuthenticationCo Set requestedScopes = authorizationCodeRequestAuthentication.getScopes(); Set allowedScopes = registeredClient.getScopes(); if (!requestedScopes.isEmpty() && !allowedScopes.containsAll(requestedScopes)) { + logDebugMessage("Invalid scope"); throwError(OAuth2ErrorCodes.INVALID_SCOPE, OAuth2ParameterNames.SCOPE, authorizationCodeRequestAuthentication, registeredClient); } } - private static void validateRedirectUri(OAuth2AuthorizationCodeRequestAuthenticationContext authenticationContext) { + private void validateRedirectUri(OAuth2AuthorizationCodeRequestAuthenticationContext authenticationContext) { OAuth2AuthorizationCodeRequestAuthenticationToken authorizationCodeRequestAuthentication = authenticationContext.getAuthentication(); RegisteredClient registeredClient = authenticationContext.getRegisteredClient(); @@ -124,6 +128,7 @@ private static void validateRedirectUri(OAuth2AuthorizationCodeRequestAuthentica } } if (!validRedirectUri) { + logDebugMessage("Invalid redirect_uri"); throwError(OAuth2ErrorCodes.INVALID_REQUEST, OAuth2ParameterNames.REDIRECT_URI, authorizationCodeRequestAuthentication, registeredClient); } @@ -196,4 +201,10 @@ private static void throwError(OAuth2Error error, String parameterName, throw new OAuth2AuthorizationCodeRequestAuthenticationException(error, authorizationCodeRequestAuthenticationResult); } + private void logDebugMessage(String logMessage){ + if(this.logger.isDebugEnabled()){ + this.logger.debug(logMessage); + } + } + }