From 627ae617851d4da2077c12bfcb11ff2609088fce Mon Sep 17 00:00:00 2001 From: Joe Grandja Date: Thu, 5 May 2022 06:20:57 -0400 Subject: [PATCH] Remove deprecations Closes gh-732 --- ...thorizationCodeAuthenticationProvider.java | 86 ++------------ ...tionCodeRequestAuthenticationProvider.java | 59 +++------- .../OAuth2ClientAuthenticationProvider.java | 111 ------------------ ...ientCredentialsAuthenticationProvider.java | 50 -------- ...th2RefreshTokenAuthenticationProvider.java | 87 ++------------ .../JdbcRegisteredClientRepository.java | 8 -- ...entRegistrationAuthenticationProvider.java | 51 +------- .../token/JwtEncodingContext.java | 29 ----- .../OAuth2AuthorizationCodeGrantTests.java | 3 +- .../OAuth2ClientCredentialsGrantTests.java | 3 +- .../OAuth2RefreshTokenGrantTests.java | 3 +- .../OAuth2TokenIntrospectionTests.java | 3 +- .../OAuth2TokenRevocationTests.java | 3 +- .../OidcClientRegistrationTests.java | 3 +- .../server/authorization/OidcTests.java | 3 +- ...zationCodeAuthenticationProviderTests.java | 58 +-------- ...odeRequestAuthenticationProviderTests.java | 37 +----- ...redentialsAuthenticationProviderTests.java | 18 +-- ...freshTokenAuthenticationProviderTests.java | 59 +--------- ...gistrationAuthenticationProviderTests.java | 13 +- 20 files changed, 47 insertions(+), 640 deletions(-) delete mode 100644 oauth2-authorization-server/src/main/java/org/springframework/security/oauth2/server/authorization/authentication/OAuth2ClientAuthenticationProvider.java diff --git a/oauth2-authorization-server/src/main/java/org/springframework/security/oauth2/server/authorization/authentication/OAuth2AuthorizationCodeAuthenticationProvider.java b/oauth2-authorization-server/src/main/java/org/springframework/security/oauth2/server/authorization/authentication/OAuth2AuthorizationCodeAuthenticationProvider.java index 20a64b2c..9e720cc4 100644 --- a/oauth2-authorization-server/src/main/java/org/springframework/security/oauth2/server/authorization/authentication/OAuth2AuthorizationCodeAuthenticationProvider.java +++ b/oauth2-authorization-server/src/main/java/org/springframework/security/oauth2/server/authorization/authentication/OAuth2AuthorizationCodeAuthenticationProvider.java @@ -16,12 +16,9 @@ package org.springframework.security.oauth2.server.authorization.authentication; import java.security.Principal; -import java.time.Instant; import java.util.Collections; import java.util.HashMap; import java.util.Map; -import java.util.function.Consumer; -import java.util.function.Supplier; import org.springframework.security.authentication.AuthenticationProvider; import org.springframework.security.core.Authentication; @@ -43,20 +40,12 @@ import org.springframework.security.oauth2.core.oidc.OidcIdToken; import org.springframework.security.oauth2.core.oidc.OidcScopes; import org.springframework.security.oauth2.core.oidc.endpoint.OidcParameterNames; import org.springframework.security.oauth2.jwt.Jwt; -import org.springframework.security.oauth2.jwt.JwtEncoder; import org.springframework.security.oauth2.server.authorization.OAuth2Authorization; import org.springframework.security.oauth2.server.authorization.OAuth2AuthorizationService; import org.springframework.security.oauth2.server.authorization.client.RegisteredClient; -import org.springframework.security.oauth2.server.authorization.config.ProviderSettings; import org.springframework.security.oauth2.server.authorization.context.ProviderContextHolder; import org.springframework.security.oauth2.server.authorization.token.DefaultOAuth2TokenContext; -import org.springframework.security.oauth2.server.authorization.token.DelegatingOAuth2TokenGenerator; -import org.springframework.security.oauth2.server.authorization.token.JwtEncodingContext; -import org.springframework.security.oauth2.server.authorization.token.JwtGenerator; -import org.springframework.security.oauth2.server.authorization.token.OAuth2AccessTokenGenerator; -import org.springframework.security.oauth2.server.authorization.token.OAuth2RefreshTokenGenerator; import org.springframework.security.oauth2.server.authorization.token.OAuth2TokenContext; -import org.springframework.security.oauth2.server.authorization.token.OAuth2TokenCustomizer; import org.springframework.security.oauth2.server.authorization.token.OAuth2TokenGenerator; import org.springframework.util.Assert; import org.springframework.util.StringUtils; @@ -86,29 +75,6 @@ public final class OAuth2AuthorizationCodeAuthenticationProvider implements Auth private final OAuth2AuthorizationService authorizationService; private final OAuth2TokenGenerator tokenGenerator; - // TODO Remove after removing @Deprecated OAuth2AuthorizationCodeAuthenticationProvider(OAuth2AuthorizationService, JwtEncoder) - private JwtGenerator jwtGenerator; - - @Deprecated - private Supplier refreshTokenGenerator; - - /** - * Constructs an {@code OAuth2AuthorizationCodeAuthenticationProvider} using the provided parameters. - * - * @deprecated Use {@link #OAuth2AuthorizationCodeAuthenticationProvider(OAuth2AuthorizationService, OAuth2TokenGenerator)} instead - * @param authorizationService the authorization service - * @param jwtEncoder the jwt encoder - */ - @Deprecated - public OAuth2AuthorizationCodeAuthenticationProvider(OAuth2AuthorizationService authorizationService, JwtEncoder jwtEncoder) { - Assert.notNull(authorizationService, "authorizationService cannot be null"); - Assert.notNull(jwtEncoder, "jwtEncoder cannot be null"); - this.authorizationService = authorizationService; - this.jwtGenerator = new JwtGenerator(jwtEncoder); - this.tokenGenerator = new DelegatingOAuth2TokenGenerator(this.jwtGenerator, - new OAuth2AccessTokenGenerator(), new OAuth2RefreshTokenGenerator()); - } - /** * Constructs an {@code OAuth2AuthorizationCodeAuthenticationProvider} using the provided parameters. * @@ -124,38 +90,6 @@ public final class OAuth2AuthorizationCodeAuthenticationProvider implements Auth this.tokenGenerator = tokenGenerator; } - /** - * Sets the {@link OAuth2TokenCustomizer} that customizes the - * {@link JwtEncodingContext.Builder#headers(Consumer) headers} and/or - * {@link JwtEncodingContext.Builder#claims(Consumer) claims} for the generated {@link Jwt}. - * - * @deprecated Use {@link JwtGenerator#setJwtCustomizer(OAuth2TokenCustomizer)} instead - * @param jwtCustomizer the {@link OAuth2TokenCustomizer} that customizes the headers and/or claims for the generated {@code Jwt} - */ - @Deprecated - public void setJwtCustomizer(OAuth2TokenCustomizer jwtCustomizer) { - Assert.notNull(jwtCustomizer, "jwtCustomizer cannot be null"); - if (this.jwtGenerator != null) { - this.jwtGenerator.setJwtCustomizer(jwtCustomizer); - } - } - - /** - * Sets the {@code Supplier} that generates the value for the {@link OAuth2RefreshToken}. - * - * @deprecated Use {@link OAuth2RefreshTokenGenerator} instead - * @param refreshTokenGenerator the {@code Supplier} that generates the value for the {@link OAuth2RefreshToken} - */ - @Deprecated - public void setRefreshTokenGenerator(Supplier refreshTokenGenerator) { - Assert.notNull(refreshTokenGenerator, "refreshTokenGenerator cannot be null"); - this.refreshTokenGenerator = refreshTokenGenerator; - } - - @Deprecated - protected void setProviderSettings(ProviderSettings providerSettings) { - } - @Override public Authentication authenticate(Authentication authentication) throws AuthenticationException { OAuth2AuthorizationCodeAuthenticationToken authorizationCodeAuthentication = @@ -231,20 +165,14 @@ public final class OAuth2AuthorizationCodeAuthenticationProvider implements Auth // Do not issue refresh token to public client !clientPrincipal.getClientAuthenticationMethod().equals(ClientAuthenticationMethod.NONE)) { - if (this.refreshTokenGenerator != null) { - Instant issuedAt = Instant.now(); - Instant expiresAt = issuedAt.plus(registeredClient.getTokenSettings().getRefreshTokenTimeToLive()); - refreshToken = new OAuth2RefreshToken(this.refreshTokenGenerator.get(), issuedAt, expiresAt); - } else { - tokenContext = tokenContextBuilder.tokenType(OAuth2TokenType.REFRESH_TOKEN).build(); - OAuth2Token generatedRefreshToken = this.tokenGenerator.generate(tokenContext); - if (!(generatedRefreshToken instanceof OAuth2RefreshToken)) { - OAuth2Error error = new OAuth2Error(OAuth2ErrorCodes.SERVER_ERROR, - "The token generator failed to generate the refresh token.", ERROR_URI); - throw new OAuth2AuthenticationException(error); - } - refreshToken = (OAuth2RefreshToken) generatedRefreshToken; + tokenContext = tokenContextBuilder.tokenType(OAuth2TokenType.REFRESH_TOKEN).build(); + OAuth2Token generatedRefreshToken = this.tokenGenerator.generate(tokenContext); + if (!(generatedRefreshToken instanceof OAuth2RefreshToken)) { + OAuth2Error error = new OAuth2Error(OAuth2ErrorCodes.SERVER_ERROR, + "The token generator failed to generate the refresh token.", ERROR_URI); + throw new OAuth2AuthenticationException(error); } + refreshToken = (OAuth2RefreshToken) generatedRefreshToken; authorizationBuilder.refreshToken(refreshToken); } diff --git a/oauth2-authorization-server/src/main/java/org/springframework/security/oauth2/server/authorization/authentication/OAuth2AuthorizationCodeRequestAuthenticationProvider.java b/oauth2-authorization-server/src/main/java/org/springframework/security/oauth2/server/authorization/authentication/OAuth2AuthorizationCodeRequestAuthenticationProvider.java index 4e00756d..dad30351 100644 --- a/oauth2-authorization-server/src/main/java/org/springframework/security/oauth2/server/authorization/authentication/OAuth2AuthorizationCodeRequestAuthenticationProvider.java +++ b/oauth2-authorization-server/src/main/java/org/springframework/security/oauth2/server/authorization/authentication/OAuth2AuthorizationCodeRequestAuthenticationProvider.java @@ -26,7 +26,6 @@ import java.util.Map; import java.util.Set; import java.util.function.Consumer; import java.util.function.Function; -import java.util.function.Supplier; import org.springframework.lang.Nullable; import org.springframework.security.authentication.AnonymousAuthenticationToken; @@ -87,10 +86,6 @@ public final class OAuth2AuthorizationCodeRequestAuthenticationProvider implemen private final RegisteredClientRepository registeredClientRepository; private final OAuth2AuthorizationService authorizationService; private final OAuth2AuthorizationConsentService authorizationConsentService; - - @Deprecated - private Supplier authorizationCodeSupplier; - private OAuth2TokenGenerator authorizationCodeGenerator = new OAuth2AuthorizationCodeGenerator(); private Function authenticationValidatorResolver = DEFAULT_AUTHENTICATION_VALIDATOR_RESOLVER; private Consumer authorizationConsentCustomizer; @@ -127,18 +122,6 @@ public final class OAuth2AuthorizationCodeRequestAuthenticationProvider implemen return OAuth2AuthorizationCodeRequestAuthenticationToken.class.isAssignableFrom(authentication); } - /** - * Sets the {@code Supplier} that generates the value for the {@link OAuth2AuthorizationCode}. - * - * @deprecated Use {@link #setAuthorizationCodeGenerator(OAuth2TokenGenerator)} instead - * @param authorizationCodeGenerator the {@code Supplier} that generates the value for the {@link OAuth2AuthorizationCode} - */ - @Deprecated - public void setAuthorizationCodeGenerator(Supplier authorizationCodeGenerator) { - Assert.notNull(authorizationCodeGenerator, "authorizationCodeGenerator cannot be null"); - this.authorizationCodeSupplier = authorizationCodeGenerator; - } - /** * Sets the {@link OAuth2TokenGenerator} that generates the {@link OAuth2AuthorizationCode}. * @@ -277,20 +260,13 @@ public final class OAuth2AuthorizationCodeRequestAuthenticationProvider implemen .build(); } - OAuth2AuthorizationCode authorizationCode; - if (this.authorizationCodeSupplier != null) { - Instant issuedAt = Instant.now(); - Instant expiresAt = issuedAt.plus(5, ChronoUnit.MINUTES); // TODO Allow configuration for authorization code time-to-live - authorizationCode = new OAuth2AuthorizationCode(this.authorizationCodeSupplier.get(), issuedAt, expiresAt); - } else { - OAuth2TokenContext tokenContext = createAuthorizationCodeTokenContext( - authorizationCodeRequestAuthentication, registeredClient, null, authorizationRequest.getScopes()); - authorizationCode = this.authorizationCodeGenerator.generate(tokenContext); - if (authorizationCode == null) { - OAuth2Error error = new OAuth2Error(OAuth2ErrorCodes.SERVER_ERROR, - "The token generator failed to generate the authorization code.", ERROR_URI); - throw new OAuth2AuthorizationCodeRequestAuthenticationException(error, null); - } + OAuth2TokenContext tokenContext = createAuthorizationCodeTokenContext( + authorizationCodeRequestAuthentication, registeredClient, null, authorizationRequest.getScopes()); + OAuth2AuthorizationCode authorizationCode = this.authorizationCodeGenerator.generate(tokenContext); + if (authorizationCode == null) { + OAuth2Error error = new OAuth2Error(OAuth2ErrorCodes.SERVER_ERROR, + "The token generator failed to generate the authorization code.", ERROR_URI); + throw new OAuth2AuthorizationCodeRequestAuthenticationException(error, null); } OAuth2Authorization authorization = authorizationBuilder(registeredClient, principal, authorizationRequest) @@ -411,20 +387,13 @@ public final class OAuth2AuthorizationCodeRequestAuthenticationProvider implemen this.authorizationConsentService.save(authorizationConsent); } - OAuth2AuthorizationCode authorizationCode; - if (this.authorizationCodeSupplier != null) { - Instant issuedAt = Instant.now(); - Instant expiresAt = issuedAt.plus(5, ChronoUnit.MINUTES); // TODO Allow configuration for authorization code time-to-live - authorizationCode = new OAuth2AuthorizationCode(this.authorizationCodeSupplier.get(), issuedAt, expiresAt); - } else { - OAuth2TokenContext tokenContext = createAuthorizationCodeTokenContext( - authorizationCodeRequestAuthentication, registeredClient, authorization, authorizedScopes); - authorizationCode = this.authorizationCodeGenerator.generate(tokenContext); - if (authorizationCode == null) { - OAuth2Error error = new OAuth2Error(OAuth2ErrorCodes.SERVER_ERROR, - "The token generator failed to generate the authorization code.", ERROR_URI); - throw new OAuth2AuthorizationCodeRequestAuthenticationException(error, null); - } + OAuth2TokenContext tokenContext = createAuthorizationCodeTokenContext( + authorizationCodeRequestAuthentication, registeredClient, authorization, authorizedScopes); + OAuth2AuthorizationCode authorizationCode = this.authorizationCodeGenerator.generate(tokenContext); + if (authorizationCode == null) { + OAuth2Error error = new OAuth2Error(OAuth2ErrorCodes.SERVER_ERROR, + "The token generator failed to generate the authorization code.", ERROR_URI); + throw new OAuth2AuthorizationCodeRequestAuthenticationException(error, null); } OAuth2Authorization updatedAuthorization = OAuth2Authorization.from(authorization) diff --git a/oauth2-authorization-server/src/main/java/org/springframework/security/oauth2/server/authorization/authentication/OAuth2ClientAuthenticationProvider.java b/oauth2-authorization-server/src/main/java/org/springframework/security/oauth2/server/authorization/authentication/OAuth2ClientAuthenticationProvider.java deleted file mode 100644 index 6ed932ed..00000000 --- a/oauth2-authorization-server/src/main/java/org/springframework/security/oauth2/server/authorization/authentication/OAuth2ClientAuthenticationProvider.java +++ /dev/null @@ -1,111 +0,0 @@ -/* - * Copyright 2020-2022 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.security.oauth2.server.authorization.authentication; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.security.authentication.AuthenticationProvider; -import org.springframework.security.core.Authentication; -import org.springframework.security.core.AuthenticationException; -import org.springframework.security.crypto.factory.PasswordEncoderFactories; -import org.springframework.security.crypto.password.PasswordEncoder; -import org.springframework.security.oauth2.core.ClientAuthenticationMethod; -import org.springframework.security.oauth2.server.authorization.OAuth2AuthorizationService; -import org.springframework.security.oauth2.server.authorization.client.RegisteredClient; -import org.springframework.security.oauth2.server.authorization.client.RegisteredClientRepository; -import org.springframework.security.oauth2.server.authorization.config.ProviderSettings; -import org.springframework.util.Assert; - -/** - * An {@link AuthenticationProvider} implementation used for authenticating an OAuth 2.0 Client. - * - * @author Joe Grandja - * @author Patryk Kostrzewa - * @author Daniel Garnier-Moiroux - * @author Rafal Lewczuk - * @since 0.0.1 - * @see AuthenticationProvider - * @see OAuth2ClientAuthenticationToken - * @see RegisteredClientRepository - * @see OAuth2AuthorizationService - * @see JwtClientAssertionAuthenticationProvider - * @see ClientSecretAuthenticationProvider - * @see PublicClientAuthenticationProvider - * @deprecated This implementation is decomposed into {@link JwtClientAssertionAuthenticationProvider}, - * {@link ClientSecretAuthenticationProvider} and {@link PublicClientAuthenticationProvider}. - */ -@Deprecated -public final class OAuth2ClientAuthenticationProvider implements AuthenticationProvider { - private static final ClientAuthenticationMethod JWT_CLIENT_ASSERTION_AUTHENTICATION_METHOD = - new ClientAuthenticationMethod("urn:ietf:params:oauth:client-assertion-type:jwt-bearer"); - private final JwtClientAssertionAuthenticationProvider jwtClientAssertionAuthenticationProvider; - private final ClientSecretAuthenticationProvider clientSecretAuthenticationProvider; - private final PublicClientAuthenticationProvider publicClientAuthenticationProvider; - - /** - * Constructs an {@code OAuth2ClientAuthenticationProvider} using the provided parameters. - * - * @param registeredClientRepository the repository of registered clients - * @param authorizationService the authorization service - */ - public OAuth2ClientAuthenticationProvider(RegisteredClientRepository registeredClientRepository, - OAuth2AuthorizationService authorizationService) { - Assert.notNull(registeredClientRepository, "registeredClientRepository cannot be null"); - Assert.notNull(authorizationService, "authorizationService cannot be null"); - this.jwtClientAssertionAuthenticationProvider = new JwtClientAssertionAuthenticationProvider( - registeredClientRepository, authorizationService); - this.clientSecretAuthenticationProvider = new ClientSecretAuthenticationProvider( - registeredClientRepository, authorizationService); - this.publicClientAuthenticationProvider = new PublicClientAuthenticationProvider( - registeredClientRepository, authorizationService); - } - - /** - * Sets the {@link PasswordEncoder} used to validate - * the {@link RegisteredClient#getClientSecret() client secret}. - * If not set, the client secret will be compared using - * {@link PasswordEncoderFactories#createDelegatingPasswordEncoder()}. - * - * @param passwordEncoder the {@link PasswordEncoder} used to validate the client secret - */ - public void setPasswordEncoder(PasswordEncoder passwordEncoder) { - this.clientSecretAuthenticationProvider.setPasswordEncoder(passwordEncoder); - } - - @Autowired - protected void setProviderSettings(ProviderSettings providerSettings) { - } - - @Override - public Authentication authenticate(Authentication authentication) throws AuthenticationException { - OAuth2ClientAuthenticationToken clientAuthentication = - (OAuth2ClientAuthenticationToken) authentication; - - if (JWT_CLIENT_ASSERTION_AUTHENTICATION_METHOD.equals(clientAuthentication.getClientAuthenticationMethod())) { - return this.jwtClientAssertionAuthenticationProvider.authenticate(authentication); - } else if (ClientAuthenticationMethod.CLIENT_SECRET_BASIC.equals(clientAuthentication.getClientAuthenticationMethod()) || - ClientAuthenticationMethod.CLIENT_SECRET_POST.equals(clientAuthentication.getClientAuthenticationMethod())) { - return this.clientSecretAuthenticationProvider.authenticate(authentication); - } else { - return this.publicClientAuthenticationProvider.authenticate(authentication); - } - } - - @Override - public boolean supports(Class authentication) { - return OAuth2ClientAuthenticationToken.class.isAssignableFrom(authentication); - } - -} diff --git a/oauth2-authorization-server/src/main/java/org/springframework/security/oauth2/server/authorization/authentication/OAuth2ClientCredentialsAuthenticationProvider.java b/oauth2-authorization-server/src/main/java/org/springframework/security/oauth2/server/authorization/authentication/OAuth2ClientCredentialsAuthenticationProvider.java index 3e0a9b4d..e96ba926 100644 --- a/oauth2-authorization-server/src/main/java/org/springframework/security/oauth2/server/authorization/authentication/OAuth2ClientCredentialsAuthenticationProvider.java +++ b/oauth2-authorization-server/src/main/java/org/springframework/security/oauth2/server/authorization/authentication/OAuth2ClientCredentialsAuthenticationProvider.java @@ -17,7 +17,6 @@ package org.springframework.security.oauth2.server.authorization.authentication; import java.util.LinkedHashSet; import java.util.Set; -import java.util.function.Consumer; import org.springframework.security.authentication.AuthenticationProvider; import org.springframework.security.core.Authentication; @@ -30,20 +29,12 @@ import org.springframework.security.oauth2.core.OAuth2Error; import org.springframework.security.oauth2.core.OAuth2ErrorCodes; import org.springframework.security.oauth2.core.OAuth2Token; import org.springframework.security.oauth2.core.OAuth2TokenType; -import org.springframework.security.oauth2.jwt.Jwt; -import org.springframework.security.oauth2.jwt.JwtEncoder; import org.springframework.security.oauth2.server.authorization.OAuth2Authorization; import org.springframework.security.oauth2.server.authorization.OAuth2AuthorizationService; import org.springframework.security.oauth2.server.authorization.client.RegisteredClient; -import org.springframework.security.oauth2.server.authorization.config.ProviderSettings; import org.springframework.security.oauth2.server.authorization.context.ProviderContextHolder; import org.springframework.security.oauth2.server.authorization.token.DefaultOAuth2TokenContext; -import org.springframework.security.oauth2.server.authorization.token.DelegatingOAuth2TokenGenerator; -import org.springframework.security.oauth2.server.authorization.token.JwtEncodingContext; -import org.springframework.security.oauth2.server.authorization.token.JwtGenerator; -import org.springframework.security.oauth2.server.authorization.token.OAuth2AccessTokenGenerator; import org.springframework.security.oauth2.server.authorization.token.OAuth2TokenContext; -import org.springframework.security.oauth2.server.authorization.token.OAuth2TokenCustomizer; import org.springframework.security.oauth2.server.authorization.token.OAuth2TokenGenerator; import org.springframework.util.Assert; import org.springframework.util.CollectionUtils; @@ -68,27 +59,6 @@ public final class OAuth2ClientCredentialsAuthenticationProvider implements Auth private final OAuth2AuthorizationService authorizationService; private final OAuth2TokenGenerator tokenGenerator; - // TODO Remove after removing @Deprecated OAuth2ClientCredentialsAuthenticationProvider(OAuth2AuthorizationService, JwtEncoder) - private JwtGenerator jwtGenerator; - - /** - * Constructs an {@code OAuth2ClientCredentialsAuthenticationProvider} using the provided parameters. - * - * @deprecated Use {@link #OAuth2ClientCredentialsAuthenticationProvider(OAuth2AuthorizationService, OAuth2TokenGenerator)} instead - * @param authorizationService the authorization service - * @param jwtEncoder the jwt encoder - */ - @Deprecated - public OAuth2ClientCredentialsAuthenticationProvider(OAuth2AuthorizationService authorizationService, - JwtEncoder jwtEncoder) { - Assert.notNull(authorizationService, "authorizationService cannot be null"); - Assert.notNull(jwtEncoder, "jwtEncoder cannot be null"); - this.authorizationService = authorizationService; - this.jwtGenerator = new JwtGenerator(jwtEncoder); - this.tokenGenerator = new DelegatingOAuth2TokenGenerator( - this.jwtGenerator, new OAuth2AccessTokenGenerator()); - } - /** * Constructs an {@code OAuth2ClientCredentialsAuthenticationProvider} using the provided parameters. * @@ -104,26 +74,6 @@ public final class OAuth2ClientCredentialsAuthenticationProvider implements Auth this.tokenGenerator = tokenGenerator; } - /** - * Sets the {@link OAuth2TokenCustomizer} that customizes the - * {@link JwtEncodingContext.Builder#headers(Consumer) headers} and/or - * {@link JwtEncodingContext.Builder#claims(Consumer) claims} for the generated {@link Jwt}. - * - * @deprecated Use {@link JwtGenerator#setJwtCustomizer(OAuth2TokenCustomizer)} instead - * @param jwtCustomizer the {@link OAuth2TokenCustomizer} that customizes the headers and/or claims for the generated {@code Jwt} - */ - @Deprecated - public void setJwtCustomizer(OAuth2TokenCustomizer jwtCustomizer) { - Assert.notNull(jwtCustomizer, "jwtCustomizer cannot be null"); - if (this.jwtGenerator != null) { - this.jwtGenerator.setJwtCustomizer(jwtCustomizer); - } - } - - @Deprecated - protected void setProviderSettings(ProviderSettings providerSettings) { - } - @Override public Authentication authenticate(Authentication authentication) throws AuthenticationException { OAuth2ClientCredentialsAuthenticationToken clientCredentialsAuthentication = diff --git a/oauth2-authorization-server/src/main/java/org/springframework/security/oauth2/server/authorization/authentication/OAuth2RefreshTokenAuthenticationProvider.java b/oauth2-authorization-server/src/main/java/org/springframework/security/oauth2/server/authorization/authentication/OAuth2RefreshTokenAuthenticationProvider.java index b68570b4..f2d766ff 100644 --- a/oauth2-authorization-server/src/main/java/org/springframework/security/oauth2/server/authorization/authentication/OAuth2RefreshTokenAuthenticationProvider.java +++ b/oauth2-authorization-server/src/main/java/org/springframework/security/oauth2/server/authorization/authentication/OAuth2RefreshTokenAuthenticationProvider.java @@ -16,13 +16,10 @@ package org.springframework.security.oauth2.server.authorization.authentication; import java.security.Principal; -import java.time.Instant; import java.util.Collections; import java.util.HashMap; import java.util.Map; import java.util.Set; -import java.util.function.Consumer; -import java.util.function.Supplier; import org.springframework.security.authentication.AuthenticationProvider; import org.springframework.security.core.Authentication; @@ -40,20 +37,12 @@ import org.springframework.security.oauth2.core.oidc.OidcIdToken; import org.springframework.security.oauth2.core.oidc.OidcScopes; import org.springframework.security.oauth2.core.oidc.endpoint.OidcParameterNames; import org.springframework.security.oauth2.jwt.Jwt; -import org.springframework.security.oauth2.jwt.JwtEncoder; import org.springframework.security.oauth2.server.authorization.OAuth2Authorization; import org.springframework.security.oauth2.server.authorization.OAuth2AuthorizationService; import org.springframework.security.oauth2.server.authorization.client.RegisteredClient; -import org.springframework.security.oauth2.server.authorization.config.ProviderSettings; import org.springframework.security.oauth2.server.authorization.context.ProviderContextHolder; import org.springframework.security.oauth2.server.authorization.token.DefaultOAuth2TokenContext; -import org.springframework.security.oauth2.server.authorization.token.DelegatingOAuth2TokenGenerator; -import org.springframework.security.oauth2.server.authorization.token.JwtEncodingContext; -import org.springframework.security.oauth2.server.authorization.token.JwtGenerator; -import org.springframework.security.oauth2.server.authorization.token.OAuth2AccessTokenGenerator; -import org.springframework.security.oauth2.server.authorization.token.OAuth2RefreshTokenGenerator; import org.springframework.security.oauth2.server.authorization.token.OAuth2TokenContext; -import org.springframework.security.oauth2.server.authorization.token.OAuth2TokenCustomizer; import org.springframework.security.oauth2.server.authorization.token.OAuth2TokenGenerator; import org.springframework.util.Assert; @@ -79,30 +68,6 @@ public final class OAuth2RefreshTokenAuthenticationProvider implements Authentic private final OAuth2AuthorizationService authorizationService; private final OAuth2TokenGenerator tokenGenerator; - // TODO Remove after removing @Deprecated OAuth2RefreshTokenAuthenticationProvider(OAuth2AuthorizationService, JwtEncoder) - private JwtGenerator jwtGenerator; - - @Deprecated - private Supplier refreshTokenGenerator; - - /** - * Constructs an {@code OAuth2RefreshTokenAuthenticationProvider} using the provided parameters. - * - * @deprecated Use {@link #OAuth2RefreshTokenAuthenticationProvider(OAuth2AuthorizationService, OAuth2TokenGenerator)} instead - * @param authorizationService the authorization service - * @param jwtEncoder the jwt encoder - */ - @Deprecated - public OAuth2RefreshTokenAuthenticationProvider(OAuth2AuthorizationService authorizationService, - JwtEncoder jwtEncoder) { - Assert.notNull(authorizationService, "authorizationService cannot be null"); - Assert.notNull(jwtEncoder, "jwtEncoder cannot be null"); - this.authorizationService = authorizationService; - this.jwtGenerator = new JwtGenerator(jwtEncoder); - this.tokenGenerator = new DelegatingOAuth2TokenGenerator(this.jwtGenerator, - new OAuth2AccessTokenGenerator(), new OAuth2RefreshTokenGenerator()); - } - /** * Constructs an {@code OAuth2RefreshTokenAuthenticationProvider} using the provided parameters. * @@ -118,38 +83,6 @@ public final class OAuth2RefreshTokenAuthenticationProvider implements Authentic this.tokenGenerator = tokenGenerator; } - /** - * Sets the {@link OAuth2TokenCustomizer} that customizes the - * {@link JwtEncodingContext.Builder#headers(Consumer) headers} and/or - * {@link JwtEncodingContext.Builder#claims(Consumer) claims} for the generated {@link Jwt}. - * - * @deprecated Use {@link JwtGenerator#setJwtCustomizer(OAuth2TokenCustomizer)} instead - * @param jwtCustomizer the {@link OAuth2TokenCustomizer} that customizes the headers and/or claims for the generated {@code Jwt} - */ - @Deprecated - public void setJwtCustomizer(OAuth2TokenCustomizer jwtCustomizer) { - Assert.notNull(jwtCustomizer, "jwtCustomizer cannot be null"); - if (this.jwtGenerator != null) { - this.jwtGenerator.setJwtCustomizer(jwtCustomizer); - } - } - - /** - * Sets the {@code Supplier} that generates the value for the {@link OAuth2RefreshToken}. - * - * @deprecated Use {@link OAuth2RefreshTokenGenerator} instead - * @param refreshTokenGenerator the {@code Supplier} that generates the value for the {@link OAuth2RefreshToken} - */ - @Deprecated - public void setRefreshTokenGenerator(Supplier refreshTokenGenerator) { - Assert.notNull(refreshTokenGenerator, "refreshTokenGenerator cannot be null"); - this.refreshTokenGenerator = refreshTokenGenerator; - } - - @Deprecated - protected void setProviderSettings(ProviderSettings providerSettings) { - } - @Override public Authentication authenticate(Authentication authentication) throws AuthenticationException { OAuth2RefreshTokenAuthenticationToken refreshTokenAuthentication = @@ -229,20 +162,14 @@ public final class OAuth2RefreshTokenAuthenticationProvider implements Authentic // ----- Refresh token ----- OAuth2RefreshToken currentRefreshToken = refreshToken.getToken(); if (!registeredClient.getTokenSettings().isReuseRefreshTokens()) { - if (this.refreshTokenGenerator != null) { - Instant issuedAt = Instant.now(); - Instant expiresAt = issuedAt.plus(registeredClient.getTokenSettings().getRefreshTokenTimeToLive()); - currentRefreshToken = new OAuth2RefreshToken(this.refreshTokenGenerator.get(), issuedAt, expiresAt); - } else { - tokenContext = tokenContextBuilder.tokenType(OAuth2TokenType.REFRESH_TOKEN).build(); - OAuth2Token generatedRefreshToken = this.tokenGenerator.generate(tokenContext); - if (!(generatedRefreshToken instanceof OAuth2RefreshToken)) { - OAuth2Error error = new OAuth2Error(OAuth2ErrorCodes.SERVER_ERROR, - "The token generator failed to generate the refresh token.", ERROR_URI); - throw new OAuth2AuthenticationException(error); - } - currentRefreshToken = (OAuth2RefreshToken) generatedRefreshToken; + tokenContext = tokenContextBuilder.tokenType(OAuth2TokenType.REFRESH_TOKEN).build(); + OAuth2Token generatedRefreshToken = this.tokenGenerator.generate(tokenContext); + if (!(generatedRefreshToken instanceof OAuth2RefreshToken)) { + OAuth2Error error = new OAuth2Error(OAuth2ErrorCodes.SERVER_ERROR, + "The token generator failed to generate the refresh token.", ERROR_URI); + throw new OAuth2AuthenticationException(error); } + currentRefreshToken = (OAuth2RefreshToken) generatedRefreshToken; authorizationBuilder.refreshToken(currentRefreshToken); } diff --git a/oauth2-authorization-server/src/main/java/org/springframework/security/oauth2/server/authorization/client/JdbcRegisteredClientRepository.java b/oauth2-authorization-server/src/main/java/org/springframework/security/oauth2/server/authorization/client/JdbcRegisteredClientRepository.java index 70ad8e7a..79b27580 100644 --- a/oauth2-authorization-server/src/main/java/org/springframework/security/oauth2/server/authorization/client/JdbcRegisteredClientRepository.java +++ b/oauth2-authorization-server/src/main/java/org/springframework/security/oauth2/server/authorization/client/JdbcRegisteredClientRepository.java @@ -36,7 +36,6 @@ import org.springframework.jdbc.core.JdbcOperations; import org.springframework.jdbc.core.PreparedStatementSetter; import org.springframework.jdbc.core.RowMapper; import org.springframework.jdbc.core.SqlParameterValue; -import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.security.jackson2.SecurityJackson2Modules; import org.springframework.security.oauth2.core.AuthorizationGrantType; import org.springframework.security.oauth2.core.ClientAuthenticationMethod; @@ -343,13 +342,6 @@ public class JdbcRegisteredClientRepository implements RegisteredClientRepositor this.objectMapper = objectMapper; } - /** - * @deprecated See javadoc {@link RegisteredClientRepository#save(RegisteredClient)} - */ - @Deprecated - public final void setPasswordEncoder(PasswordEncoder passwordEncoder) { - } - protected final ObjectMapper getObjectMapper() { return this.objectMapper; } diff --git a/oauth2-authorization-server/src/main/java/org/springframework/security/oauth2/server/authorization/oidc/authentication/OidcClientRegistrationAuthenticationProvider.java b/oauth2-authorization-server/src/main/java/org/springframework/security/oauth2/server/authorization/oidc/authentication/OidcClientRegistrationAuthenticationProvider.java index ad4120c8..cf9aaa22 100644 --- a/oauth2-authorization-server/src/main/java/org/springframework/security/oauth2/server/authorization/oidc/authentication/OidcClientRegistrationAuthenticationProvider.java +++ b/oauth2-authorization-server/src/main/java/org/springframework/security/oauth2/server/authorization/oidc/authentication/OidcClientRegistrationAuthenticationProvider.java @@ -26,7 +26,6 @@ import java.util.List; import java.util.Set; import java.util.UUID; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.authentication.AuthenticationProvider; import org.springframework.security.core.Authentication; import org.springframework.security.core.AuthenticationException; @@ -47,19 +46,16 @@ import org.springframework.security.oauth2.core.oidc.OidcClientMetadataClaimName import org.springframework.security.oauth2.core.oidc.OidcClientRegistration; import org.springframework.security.oauth2.jose.jws.MacAlgorithm; import org.springframework.security.oauth2.jose.jws.SignatureAlgorithm; -import org.springframework.security.oauth2.jwt.JwtEncoder; import org.springframework.security.oauth2.server.authorization.OAuth2Authorization; import org.springframework.security.oauth2.server.authorization.OAuth2AuthorizationService; import org.springframework.security.oauth2.server.authorization.authentication.OAuth2ClientAuthenticationToken; import org.springframework.security.oauth2.server.authorization.client.RegisteredClient; import org.springframework.security.oauth2.server.authorization.client.RegisteredClientRepository; import org.springframework.security.oauth2.server.authorization.config.ClientSettings; -import org.springframework.security.oauth2.server.authorization.config.ProviderSettings; import org.springframework.security.oauth2.server.authorization.config.TokenSettings; import org.springframework.security.oauth2.server.authorization.context.ProviderContext; import org.springframework.security.oauth2.server.authorization.context.ProviderContextHolder; import org.springframework.security.oauth2.server.authorization.token.DefaultOAuth2TokenContext; -import org.springframework.security.oauth2.server.authorization.token.JwtGenerator; import org.springframework.security.oauth2.server.authorization.token.OAuth2TokenContext; import org.springframework.security.oauth2.server.authorization.token.OAuth2TokenGenerator; import org.springframework.security.oauth2.server.resource.authentication.AbstractOAuth2TokenAuthenticationToken; @@ -91,42 +87,7 @@ public final class OidcClientRegistrationAuthenticationProvider implements Authe private static final String DEFAULT_CLIENT_CONFIGURATION_AUTHORIZED_SCOPE = "client.read"; private final RegisteredClientRepository registeredClientRepository; private final OAuth2AuthorizationService authorizationService; - private OAuth2TokenGenerator tokenGenerator; - - /** - * Constructs an {@code OidcClientRegistrationAuthenticationProvider} using the provided parameters. - * - * @param registeredClientRepository the repository of registered clients - * @param authorizationService the authorization service - * @deprecated Use {@link #OidcClientRegistrationAuthenticationProvider(RegisteredClientRepository, OAuth2AuthorizationService, JwtEncoder)} instead - */ - @Deprecated - public OidcClientRegistrationAuthenticationProvider(RegisteredClientRepository registeredClientRepository, - OAuth2AuthorizationService authorizationService) { - Assert.notNull(registeredClientRepository, "registeredClientRepository cannot be null"); - Assert.notNull(authorizationService, "authorizationService cannot be null"); - this.registeredClientRepository = registeredClientRepository; - this.authorizationService = authorizationService; - } - - /** - * Constructs an {@code OidcClientRegistrationAuthenticationProvider} using the provided parameters. - * - * @param registeredClientRepository the repository of registered clients - * @param authorizationService the authorization service - * @param jwtEncoder the jwt encoder - * @deprecated Use {@link #OidcClientRegistrationAuthenticationProvider(RegisteredClientRepository, OAuth2AuthorizationService, OAuth2TokenGenerator)} instead - */ - @Deprecated - public OidcClientRegistrationAuthenticationProvider(RegisteredClientRepository registeredClientRepository, - OAuth2AuthorizationService authorizationService, JwtEncoder jwtEncoder) { - Assert.notNull(registeredClientRepository, "registeredClientRepository cannot be null"); - Assert.notNull(authorizationService, "authorizationService cannot be null"); - Assert.notNull(jwtEncoder, "jwtEncoder cannot be null"); - this.registeredClientRepository = registeredClientRepository; - this.authorizationService = authorizationService; - this.tokenGenerator = new JwtGenerator(jwtEncoder); - } + private final OAuth2TokenGenerator tokenGenerator; /** * Constructs an {@code OidcClientRegistrationAuthenticationProvider} using the provided parameters. @@ -146,16 +107,6 @@ public final class OidcClientRegistrationAuthenticationProvider implements Authe this.tokenGenerator = tokenGenerator; } - @Deprecated - @Autowired(required = false) - protected void setJwtEncoder(JwtEncoder jwtEncoder) { - this.tokenGenerator = new JwtGenerator(jwtEncoder); - } - - @Deprecated - protected void setProviderSettings(ProviderSettings providerSettings) { - } - @Override public Authentication authenticate(Authentication authentication) throws AuthenticationException { OidcClientRegistrationAuthenticationToken clientRegistrationAuthentication = diff --git a/oauth2-authorization-server/src/main/java/org/springframework/security/oauth2/server/authorization/token/JwtEncodingContext.java b/oauth2-authorization-server/src/main/java/org/springframework/security/oauth2/server/authorization/token/JwtEncodingContext.java index a934e9a5..371a081b 100644 --- a/oauth2-authorization-server/src/main/java/org/springframework/security/oauth2/server/authorization/token/JwtEncodingContext.java +++ b/oauth2-authorization-server/src/main/java/org/springframework/security/oauth2/server/authorization/token/JwtEncodingContext.java @@ -18,7 +18,6 @@ package org.springframework.security.oauth2.server.authorization.token; import java.util.Collections; import java.util.HashMap; import java.util.Map; -import java.util.function.Consumer; import org.springframework.lang.Nullable; import org.springframework.security.oauth2.jwt.JwsHeader; @@ -101,34 +100,6 @@ public final class JwtEncodingContext implements OAuth2TokenContext { put(JwtClaimsSet.Builder.class, claimsBuilder); } - /** - * A {@code Consumer} of the {@link JwsHeader.Builder headers} - * allowing the ability to add, replace, or remove. - * - * @deprecated Use {@link #getHeaders()} instead - * @param headersConsumer a {@code Consumer} of the {@link JwsHeader.Builder headers} - * @return the {@link Builder} for further configuration - */ - @Deprecated - public Builder headers(Consumer headersConsumer) { - headersConsumer.accept(get(JwsHeader.Builder.class)); - return this; - } - - /** - * A {@code Consumer} of the {@link JwtClaimsSet.Builder claims} - * allowing the ability to add, replace, or remove. - * - * @deprecated Use {@link #getClaims()} instead - * @param claimsConsumer a {@code Consumer} of the {@link JwtClaimsSet.Builder claims} - * @return the {@link Builder} for further configuration - */ - @Deprecated - public Builder claims(Consumer claimsConsumer) { - claimsConsumer.accept(get(JwtClaimsSet.Builder.class)); - return this; - } - /** * Builds a new {@link JwtEncodingContext}. * diff --git a/oauth2-authorization-server/src/test/java/org/springframework/security/config/annotation/web/configurers/oauth2/server/authorization/OAuth2AuthorizationCodeGrantTests.java b/oauth2-authorization-server/src/test/java/org/springframework/security/config/annotation/web/configurers/oauth2/server/authorization/OAuth2AuthorizationCodeGrantTests.java index 7421d6d0..57cfe4bd 100644 --- a/oauth2-authorization-server/src/test/java/org/springframework/security/config/annotation/web/configurers/oauth2/server/authorization/OAuth2AuthorizationCodeGrantTests.java +++ b/oauth2-authorization-server/src/test/java/org/springframework/security/config/annotation/web/configurers/oauth2/server/authorization/OAuth2AuthorizationCodeGrantTests.java @@ -746,10 +746,9 @@ public class OAuth2AuthorizationCodeGrantTests { } @Bean - RegisteredClientRepository registeredClientRepository(JdbcOperations jdbcOperations, PasswordEncoder passwordEncoder) { + RegisteredClientRepository registeredClientRepository(JdbcOperations jdbcOperations) { JdbcRegisteredClientRepository jdbcRegisteredClientRepository = new JdbcRegisteredClientRepository(jdbcOperations); RegisteredClientParametersMapper registeredClientParametersMapper = new RegisteredClientParametersMapper(); - registeredClientParametersMapper.setPasswordEncoder(passwordEncoder); jdbcRegisteredClientRepository.setRegisteredClientParametersMapper(registeredClientParametersMapper); return jdbcRegisteredClientRepository; } diff --git a/oauth2-authorization-server/src/test/java/org/springframework/security/config/annotation/web/configurers/oauth2/server/authorization/OAuth2ClientCredentialsGrantTests.java b/oauth2-authorization-server/src/test/java/org/springframework/security/config/annotation/web/configurers/oauth2/server/authorization/OAuth2ClientCredentialsGrantTests.java index c0f85a5d..34c22622 100644 --- a/oauth2-authorization-server/src/test/java/org/springframework/security/config/annotation/web/configurers/oauth2/server/authorization/OAuth2ClientCredentialsGrantTests.java +++ b/oauth2-authorization-server/src/test/java/org/springframework/security/config/annotation/web/configurers/oauth2/server/authorization/OAuth2ClientCredentialsGrantTests.java @@ -283,10 +283,9 @@ public class OAuth2ClientCredentialsGrantTests { } @Bean - RegisteredClientRepository registeredClientRepository(JdbcOperations jdbcOperations, PasswordEncoder passwordEncoder) { + RegisteredClientRepository registeredClientRepository(JdbcOperations jdbcOperations) { JdbcRegisteredClientRepository jdbcRegisteredClientRepository = new JdbcRegisteredClientRepository(jdbcOperations); RegisteredClientParametersMapper registeredClientParametersMapper = new RegisteredClientParametersMapper(); - registeredClientParametersMapper.setPasswordEncoder(passwordEncoder); jdbcRegisteredClientRepository.setRegisteredClientParametersMapper(registeredClientParametersMapper); return jdbcRegisteredClientRepository; } diff --git a/oauth2-authorization-server/src/test/java/org/springframework/security/config/annotation/web/configurers/oauth2/server/authorization/OAuth2RefreshTokenGrantTests.java b/oauth2-authorization-server/src/test/java/org/springframework/security/config/annotation/web/configurers/oauth2/server/authorization/OAuth2RefreshTokenGrantTests.java index 27a111ad..21bde9f8 100644 --- a/oauth2-authorization-server/src/test/java/org/springframework/security/config/annotation/web/configurers/oauth2/server/authorization/OAuth2RefreshTokenGrantTests.java +++ b/oauth2-authorization-server/src/test/java/org/springframework/security/config/annotation/web/configurers/oauth2/server/authorization/OAuth2RefreshTokenGrantTests.java @@ -251,10 +251,9 @@ public class OAuth2RefreshTokenGrantTests { } @Bean - RegisteredClientRepository registeredClientRepository(JdbcOperations jdbcOperations, PasswordEncoder passwordEncoder) { + RegisteredClientRepository registeredClientRepository(JdbcOperations jdbcOperations) { JdbcRegisteredClientRepository jdbcRegisteredClientRepository = new JdbcRegisteredClientRepository(jdbcOperations); RegisteredClientParametersMapper registeredClientParametersMapper = new RegisteredClientParametersMapper(); - registeredClientParametersMapper.setPasswordEncoder(passwordEncoder); jdbcRegisteredClientRepository.setRegisteredClientParametersMapper(registeredClientParametersMapper); return jdbcRegisteredClientRepository; } diff --git a/oauth2-authorization-server/src/test/java/org/springframework/security/config/annotation/web/configurers/oauth2/server/authorization/OAuth2TokenIntrospectionTests.java b/oauth2-authorization-server/src/test/java/org/springframework/security/config/annotation/web/configurers/oauth2/server/authorization/OAuth2TokenIntrospectionTests.java index 505b12ab..79475b3e 100644 --- a/oauth2-authorization-server/src/test/java/org/springframework/security/config/annotation/web/configurers/oauth2/server/authorization/OAuth2TokenIntrospectionTests.java +++ b/oauth2-authorization-server/src/test/java/org/springframework/security/config/annotation/web/configurers/oauth2/server/authorization/OAuth2TokenIntrospectionTests.java @@ -427,10 +427,9 @@ public class OAuth2TokenIntrospectionTests { } @Bean - RegisteredClientRepository registeredClientRepository(JdbcOperations jdbcOperations, PasswordEncoder passwordEncoder) { + RegisteredClientRepository registeredClientRepository(JdbcOperations jdbcOperations) { JdbcRegisteredClientRepository jdbcRegisteredClientRepository = new JdbcRegisteredClientRepository(jdbcOperations); RegisteredClientParametersMapper registeredClientParametersMapper = new RegisteredClientParametersMapper(); - registeredClientParametersMapper.setPasswordEncoder(passwordEncoder); jdbcRegisteredClientRepository.setRegisteredClientParametersMapper(registeredClientParametersMapper); return jdbcRegisteredClientRepository; } diff --git a/oauth2-authorization-server/src/test/java/org/springframework/security/config/annotation/web/configurers/oauth2/server/authorization/OAuth2TokenRevocationTests.java b/oauth2-authorization-server/src/test/java/org/springframework/security/config/annotation/web/configurers/oauth2/server/authorization/OAuth2TokenRevocationTests.java index 48822e3c..2fb8b168 100644 --- a/oauth2-authorization-server/src/test/java/org/springframework/security/config/annotation/web/configurers/oauth2/server/authorization/OAuth2TokenRevocationTests.java +++ b/oauth2-authorization-server/src/test/java/org/springframework/security/config/annotation/web/configurers/oauth2/server/authorization/OAuth2TokenRevocationTests.java @@ -250,10 +250,9 @@ public class OAuth2TokenRevocationTests { } @Bean - RegisteredClientRepository registeredClientRepository(JdbcOperations jdbcOperations, PasswordEncoder passwordEncoder) { + RegisteredClientRepository registeredClientRepository(JdbcOperations jdbcOperations) { JdbcRegisteredClientRepository jdbcRegisteredClientRepository = new JdbcRegisteredClientRepository(jdbcOperations); RegisteredClientParametersMapper registeredClientParametersMapper = new RegisteredClientParametersMapper(); - registeredClientParametersMapper.setPasswordEncoder(passwordEncoder); jdbcRegisteredClientRepository.setRegisteredClientParametersMapper(registeredClientParametersMapper); return jdbcRegisteredClientRepository; } diff --git a/oauth2-authorization-server/src/test/java/org/springframework/security/config/annotation/web/configurers/oauth2/server/authorization/OidcClientRegistrationTests.java b/oauth2-authorization-server/src/test/java/org/springframework/security/config/annotation/web/configurers/oauth2/server/authorization/OidcClientRegistrationTests.java index 00dfc13f..44049974 100644 --- a/oauth2-authorization-server/src/test/java/org/springframework/security/config/annotation/web/configurers/oauth2/server/authorization/OidcClientRegistrationTests.java +++ b/oauth2-authorization-server/src/test/java/org/springframework/security/config/annotation/web/configurers/oauth2/server/authorization/OidcClientRegistrationTests.java @@ -378,10 +378,9 @@ public class OidcClientRegistrationTests { // @formatter:on @Bean - RegisteredClientRepository registeredClientRepository(JdbcOperations jdbcOperations, PasswordEncoder passwordEncoder) { + RegisteredClientRepository registeredClientRepository(JdbcOperations jdbcOperations) { RegisteredClient registeredClient = TestRegisteredClients.registeredClient().build(); RegisteredClientParametersMapper registeredClientParametersMapper = new RegisteredClientParametersMapper(); - registeredClientParametersMapper.setPasswordEncoder(passwordEncoder); JdbcRegisteredClientRepository registeredClientRepository = new JdbcRegisteredClientRepository(jdbcOperations); registeredClientRepository.setRegisteredClientParametersMapper(registeredClientParametersMapper); registeredClientRepository.save(registeredClient); diff --git a/oauth2-authorization-server/src/test/java/org/springframework/security/config/annotation/web/configurers/oauth2/server/authorization/OidcTests.java b/oauth2-authorization-server/src/test/java/org/springframework/security/config/annotation/web/configurers/oauth2/server/authorization/OidcTests.java index e4b26f35..791d0692 100644 --- a/oauth2-authorization-server/src/test/java/org/springframework/security/config/annotation/web/configurers/oauth2/server/authorization/OidcTests.java +++ b/oauth2-authorization-server/src/test/java/org/springframework/security/config/annotation/web/configurers/oauth2/server/authorization/OidcTests.java @@ -325,10 +325,9 @@ public class OidcTests { } @Bean - RegisteredClientRepository registeredClientRepository(JdbcOperations jdbcOperations, PasswordEncoder passwordEncoder) { + RegisteredClientRepository registeredClientRepository(JdbcOperations jdbcOperations) { JdbcRegisteredClientRepository jdbcRegisteredClientRepository = new JdbcRegisteredClientRepository(jdbcOperations); RegisteredClientParametersMapper registeredClientParametersMapper = new RegisteredClientParametersMapper(); - registeredClientParametersMapper.setPasswordEncoder(passwordEncoder); jdbcRegisteredClientRepository.setRegisteredClientParametersMapper(registeredClientParametersMapper); return jdbcRegisteredClientRepository; } diff --git a/oauth2-authorization-server/src/test/java/org/springframework/security/oauth2/server/authorization/authentication/OAuth2AuthorizationCodeAuthenticationProviderTests.java b/oauth2-authorization-server/src/test/java/org/springframework/security/oauth2/server/authorization/authentication/OAuth2AuthorizationCodeAuthenticationProviderTests.java index 03d65e80..c712a0b3 100644 --- a/oauth2-authorization-server/src/test/java/org/springframework/security/oauth2/server/authorization/authentication/OAuth2AuthorizationCodeAuthenticationProviderTests.java +++ b/oauth2-authorization-server/src/test/java/org/springframework/security/oauth2/server/authorization/authentication/OAuth2AuthorizationCodeAuthenticationProviderTests.java @@ -23,7 +23,6 @@ import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; -import java.util.function.Supplier; import org.junit.After; import org.junit.Before; @@ -130,39 +129,18 @@ public class OAuth2AuthorizationCodeAuthenticationProviderTests { @Test public void constructorWhenAuthorizationServiceNullThenThrowIllegalArgumentException() { - assertThatThrownBy(() -> new OAuth2AuthorizationCodeAuthenticationProvider(null, this.jwtEncoder)) + assertThatThrownBy(() -> new OAuth2AuthorizationCodeAuthenticationProvider(null, this.tokenGenerator)) .isInstanceOf(IllegalArgumentException.class) .hasMessage("authorizationService cannot be null"); } - @Test - public void constructorWhenJwtEncoderNullThenThrowIllegalArgumentException() { - assertThatThrownBy(() -> new OAuth2AuthorizationCodeAuthenticationProvider(this.authorizationService, (JwtEncoder) null)) - .isInstanceOf(IllegalArgumentException.class) - .hasMessage("jwtEncoder cannot be null"); - } - @Test public void constructorWhenTokenGeneratorNullThenThrowIllegalArgumentException() { - assertThatThrownBy(() -> new OAuth2AuthorizationCodeAuthenticationProvider(this.authorizationService, (OAuth2TokenGenerator) null)) + assertThatThrownBy(() -> new OAuth2AuthorizationCodeAuthenticationProvider(this.authorizationService, null)) .isInstanceOf(IllegalArgumentException.class) .hasMessage("tokenGenerator cannot be null"); } - @Test - public void setJwtCustomizerWhenNullThenThrowIllegalArgumentException() { - assertThatThrownBy(() -> this.authenticationProvider.setJwtCustomizer(null)) - .isInstanceOf(IllegalArgumentException.class) - .hasMessage("jwtCustomizer cannot be null"); - } - - @Test - public void setRefreshTokenGeneratorWhenNullThenThrowIllegalArgumentException() { - assertThatThrownBy(() -> this.authenticationProvider.setRefreshTokenGenerator(null)) - .isInstanceOf(IllegalArgumentException.class) - .hasMessage("refreshTokenGenerator cannot be null"); - } - @Test public void supportsWhenTypeOAuth2AuthorizationCodeAuthenticationTokenThenReturnTrue() { assertThat(this.authenticationProvider.supports(OAuth2AuthorizationCodeAuthenticationToken.class)).isTrue(); @@ -660,38 +638,6 @@ public class OAuth2AuthorizationCodeAuthenticationProviderTests { assertThat(accessTokenAuthentication.getRefreshToken()).isNull(); } - @Test - public void authenticateWhenCustomRefreshTokenGeneratorThenUsed() { - RegisteredClient registeredClient = TestRegisteredClients.registeredClient().build(); - OAuth2Authorization authorization = TestOAuth2Authorizations.authorization(registeredClient).build(); - when(this.authorizationService.findByToken(eq(AUTHORIZATION_CODE), eq(AUTHORIZATION_CODE_TOKEN_TYPE))) - .thenReturn(authorization); - - when(this.jwtEncoder.encode(any())).thenReturn(createJwt()); - - @SuppressWarnings("unchecked") - Supplier refreshTokenGenerator = spy(new Supplier() { - @Override - public String get() { - return "custom-refresh-token"; - } - }); - this.authenticationProvider.setRefreshTokenGenerator(refreshTokenGenerator); - - OAuth2ClientAuthenticationToken clientPrincipal = new OAuth2ClientAuthenticationToken( - registeredClient, ClientAuthenticationMethod.CLIENT_SECRET_BASIC, registeredClient.getClientSecret()); - OAuth2AuthorizationRequest authorizationRequest = authorization.getAttribute( - OAuth2AuthorizationRequest.class.getName()); - OAuth2AuthorizationCodeAuthenticationToken authentication = - new OAuth2AuthorizationCodeAuthenticationToken(AUTHORIZATION_CODE, clientPrincipal, authorizationRequest.getRedirectUri(), null); - - OAuth2AccessTokenAuthenticationToken accessTokenAuthentication = - (OAuth2AccessTokenAuthenticationToken) this.authenticationProvider.authenticate(authentication); - - verify(refreshTokenGenerator).get(); - assertThat(accessTokenAuthentication.getRefreshToken().getTokenValue()).isEqualTo(refreshTokenGenerator.get()); - } - @Test public void authenticateWhenAccessTokenFormatReferenceThenAccessTokenGeneratorCalled() { // @formatter:off diff --git a/oauth2-authorization-server/src/test/java/org/springframework/security/oauth2/server/authorization/authentication/OAuth2AuthorizationCodeRequestAuthenticationProviderTests.java b/oauth2-authorization-server/src/test/java/org/springframework/security/oauth2/server/authorization/authentication/OAuth2AuthorizationCodeRequestAuthenticationProviderTests.java index 86635a96..b96560d1 100644 --- a/oauth2-authorization-server/src/test/java/org/springframework/security/oauth2/server/authorization/authentication/OAuth2AuthorizationCodeRequestAuthenticationProviderTests.java +++ b/oauth2-authorization-server/src/test/java/org/springframework/security/oauth2/server/authorization/authentication/OAuth2AuthorizationCodeRequestAuthenticationProviderTests.java @@ -23,7 +23,6 @@ import java.util.Map; import java.util.Set; import java.util.function.Consumer; import java.util.function.Function; -import java.util.function.Supplier; import org.junit.Before; import org.junit.Test; @@ -46,7 +45,6 @@ import org.springframework.security.oauth2.server.authorization.OAuth2Authorizat import org.springframework.security.oauth2.server.authorization.OAuth2AuthorizationConsent; import org.springframework.security.oauth2.server.authorization.OAuth2AuthorizationConsentService; import org.springframework.security.oauth2.server.authorization.OAuth2AuthorizationService; -import org.springframework.security.oauth2.server.authorization.token.OAuth2TokenGenerator; import org.springframework.security.oauth2.server.authorization.TestOAuth2Authorizations; import org.springframework.security.oauth2.server.authorization.client.RegisteredClient; import org.springframework.security.oauth2.server.authorization.client.RegisteredClientRepository; @@ -55,6 +53,7 @@ import org.springframework.security.oauth2.server.authorization.config.ClientSet import org.springframework.security.oauth2.server.authorization.config.ProviderSettings; import org.springframework.security.oauth2.server.authorization.context.ProviderContext; import org.springframework.security.oauth2.server.authorization.context.ProviderContextHolder; +import org.springframework.security.oauth2.server.authorization.token.OAuth2TokenGenerator; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; @@ -62,7 +61,6 @@ import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; -import static org.mockito.Mockito.spy; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -125,10 +123,7 @@ public class OAuth2AuthorizationCodeRequestAuthenticationProviderTests { @Test public void setAuthorizationCodeGeneratorWhenNullThenThrowIllegalArgumentException() { - assertThatThrownBy(() -> this.authenticationProvider.setAuthorizationCodeGenerator((Supplier) null)) - .isInstanceOf(IllegalArgumentException.class) - .hasMessage("authorizationCodeGenerator cannot be null"); - assertThatThrownBy(() -> this.authenticationProvider.setAuthorizationCodeGenerator((OAuth2TokenGenerator) null)) + assertThatThrownBy(() -> this.authenticationProvider.setAuthorizationCodeGenerator(null)) .isInstanceOf(IllegalArgumentException.class) .hasMessage("authorizationCodeGenerator cannot be null"); } @@ -514,34 +509,6 @@ public class OAuth2AuthorizationCodeRequestAuthenticationProviderTests { assertAuthorizationCodeRequestWithAuthorizationCodeResult(registeredClient, authentication, authenticationResult); } - @Test - public void authenticateWhenCustomAuthorizationCodeGeneratorThenUsed() { - RegisteredClient registeredClient = TestRegisteredClients.registeredClient().build(); - when(this.registeredClientRepository.findByClientId(eq(registeredClient.getClientId()))) - .thenReturn(registeredClient); - - @SuppressWarnings("unchecked") - Supplier authorizationCodeGenerator = spy(new Supplier() { - @Override - public String get() { - return "custom-code"; - } - }); - this.authenticationProvider.setAuthorizationCodeGenerator(authorizationCodeGenerator); - - OAuth2AuthorizationCodeRequestAuthenticationToken authentication = - authorizationCodeRequestAuthentication(registeredClient, this.principal) - .build(); - - OAuth2AuthorizationCodeRequestAuthenticationToken authenticationResult = - (OAuth2AuthorizationCodeRequestAuthenticationToken) this.authenticationProvider.authenticate(authentication); - - assertAuthorizationCodeRequestWithAuthorizationCodeResult(registeredClient, authentication, authenticationResult); - - verify(authorizationCodeGenerator).get(); - assertThat(authenticationResult.getAuthorizationCode().getTokenValue()).isEqualTo(authorizationCodeGenerator.get()); - } - @Test public void authenticateWhenAuthorizationCodeNotGeneratedThenThrowOAuth2AuthorizationCodeRequestAuthenticationException() { RegisteredClient registeredClient = TestRegisteredClients.registeredClient().build(); diff --git a/oauth2-authorization-server/src/test/java/org/springframework/security/oauth2/server/authorization/authentication/OAuth2ClientCredentialsAuthenticationProviderTests.java b/oauth2-authorization-server/src/test/java/org/springframework/security/oauth2/server/authorization/authentication/OAuth2ClientCredentialsAuthenticationProviderTests.java index 6ff35673..7ff9d77a 100644 --- a/oauth2-authorization-server/src/test/java/org/springframework/security/oauth2/server/authorization/authentication/OAuth2ClientCredentialsAuthenticationProviderTests.java +++ b/oauth2-authorization-server/src/test/java/org/springframework/security/oauth2/server/authorization/authentication/OAuth2ClientCredentialsAuthenticationProviderTests.java @@ -110,32 +110,18 @@ public class OAuth2ClientCredentialsAuthenticationProviderTests { @Test public void constructorWhenAuthorizationServiceNullThenThrowIllegalArgumentException() { - assertThatThrownBy(() -> new OAuth2ClientCredentialsAuthenticationProvider(null, this.jwtEncoder)) + assertThatThrownBy(() -> new OAuth2ClientCredentialsAuthenticationProvider(null, this.tokenGenerator)) .isInstanceOf(IllegalArgumentException.class) .hasMessage("authorizationService cannot be null"); } - @Test - public void constructorWhenJwtEncoderNullThenThrowIllegalArgumentException() { - assertThatThrownBy(() -> new OAuth2ClientCredentialsAuthenticationProvider(this.authorizationService, (JwtEncoder) null)) - .isInstanceOf(IllegalArgumentException.class) - .hasMessage("jwtEncoder cannot be null"); - } - @Test public void constructorWhenTokenGeneratorNullThenThrowIllegalArgumentException() { - assertThatThrownBy(() -> new OAuth2ClientCredentialsAuthenticationProvider(this.authorizationService, (OAuth2TokenGenerator) null)) + assertThatThrownBy(() -> new OAuth2ClientCredentialsAuthenticationProvider(this.authorizationService, null)) .isInstanceOf(IllegalArgumentException.class) .hasMessage("tokenGenerator cannot be null"); } - @Test - public void setJwtCustomizerWhenNullThenThrowIllegalArgumentException() { - assertThatThrownBy(() -> this.authenticationProvider.setJwtCustomizer(null)) - .isInstanceOf(IllegalArgumentException.class) - .hasMessage("jwtCustomizer cannot be null"); - } - @Test public void supportsWhenSupportedAuthenticationThenTrue() { assertThat(this.authenticationProvider.supports(OAuth2ClientCredentialsAuthenticationToken.class)).isTrue(); diff --git a/oauth2-authorization-server/src/test/java/org/springframework/security/oauth2/server/authorization/authentication/OAuth2RefreshTokenAuthenticationProviderTests.java b/oauth2-authorization-server/src/test/java/org/springframework/security/oauth2/server/authorization/authentication/OAuth2RefreshTokenAuthenticationProviderTests.java index 2434e096..c1d1cb63 100644 --- a/oauth2-authorization-server/src/test/java/org/springframework/security/oauth2/server/authorization/authentication/OAuth2RefreshTokenAuthenticationProviderTests.java +++ b/oauth2-authorization-server/src/test/java/org/springframework/security/oauth2/server/authorization/authentication/OAuth2RefreshTokenAuthenticationProviderTests.java @@ -23,7 +23,6 @@ import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; -import java.util.function.Supplier; import org.junit.After; import org.junit.Before; @@ -128,41 +127,19 @@ public class OAuth2RefreshTokenAuthenticationProviderTests { @Test public void constructorWhenAuthorizationServiceNullThenThrowIllegalArgumentException() { - assertThatThrownBy(() -> new OAuth2RefreshTokenAuthenticationProvider(null, this.jwtEncoder)) + assertThatThrownBy(() -> new OAuth2RefreshTokenAuthenticationProvider(null, this.tokenGenerator)) .isInstanceOf(IllegalArgumentException.class) .extracting(Throwable::getMessage) .isEqualTo("authorizationService cannot be null"); } - @Test - public void constructorWhenJwtEncoderNullThenThrowIllegalArgumentException() { - assertThatThrownBy(() -> new OAuth2RefreshTokenAuthenticationProvider(this.authorizationService, (JwtEncoder) null)) - .isInstanceOf(IllegalArgumentException.class) - .extracting(Throwable::getMessage) - .isEqualTo("jwtEncoder cannot be null"); - } - @Test public void constructorWhenTokenGeneratorNullThenThrowIllegalArgumentException() { - assertThatThrownBy(() -> new OAuth2RefreshTokenAuthenticationProvider(this.authorizationService, (OAuth2TokenGenerator) null)) + assertThatThrownBy(() -> new OAuth2RefreshTokenAuthenticationProvider(this.authorizationService, null)) .isInstanceOf(IllegalArgumentException.class) .hasMessage("tokenGenerator cannot be null"); } - @Test - public void setJwtCustomizerWhenNullThenThrowIllegalArgumentException() { - assertThatThrownBy(() -> this.authenticationProvider.setJwtCustomizer(null)) - .isInstanceOf(IllegalArgumentException.class) - .hasMessage("jwtCustomizer cannot be null"); - } - - @Test - public void setRefreshTokenGeneratorWhenNullThenThrowIllegalArgumentException() { - assertThatThrownBy(() -> this.authenticationProvider.setRefreshTokenGenerator(null)) - .isInstanceOf(IllegalArgumentException.class) - .hasMessage("refreshTokenGenerator cannot be null"); - } - @Test public void supportsWhenSupportedAuthenticationThenTrue() { assertThat(this.authenticationProvider.supports(OAuth2RefreshTokenAuthenticationToken.class)).isTrue(); @@ -337,38 +314,6 @@ public class OAuth2RefreshTokenAuthenticationProviderTests { assertThat(accessTokenAuthentication.getAccessToken().getScopes()).isEqualTo(requestedScopes); } - @Test - public void authenticateWhenCustomRefreshTokenGeneratorThenUsed() { - RegisteredClient registeredClient = TestRegisteredClients.registeredClient() - .tokenSettings(TokenSettings.builder().reuseRefreshTokens(false).build()) - .build(); - OAuth2Authorization authorization = TestOAuth2Authorizations.authorization(registeredClient).build(); - when(this.authorizationService.findByToken( - eq(authorization.getRefreshToken().getToken().getTokenValue()), - eq(OAuth2TokenType.REFRESH_TOKEN))) - .thenReturn(authorization); - - @SuppressWarnings("unchecked") - Supplier refreshTokenGenerator = spy(new Supplier() { - @Override - public String get() { - return "custom-refresh-token"; - } - }); - this.authenticationProvider.setRefreshTokenGenerator(refreshTokenGenerator); - - OAuth2ClientAuthenticationToken clientPrincipal = new OAuth2ClientAuthenticationToken( - registeredClient, ClientAuthenticationMethod.CLIENT_SECRET_BASIC, registeredClient.getClientSecret()); - OAuth2RefreshTokenAuthenticationToken authentication = new OAuth2RefreshTokenAuthenticationToken( - authorization.getRefreshToken().getToken().getTokenValue(), clientPrincipal, null, null); - - OAuth2AccessTokenAuthenticationToken accessTokenAuthentication = - (OAuth2AccessTokenAuthenticationToken) this.authenticationProvider.authenticate(authentication); - - verify(refreshTokenGenerator).get(); - assertThat(accessTokenAuthentication.getRefreshToken().getTokenValue()).isEqualTo(refreshTokenGenerator.get()); - } - @Test public void authenticateWhenRequestedScopesNotAuthorizedThenThrowOAuth2AuthenticationException() { RegisteredClient registeredClient = TestRegisteredClients.registeredClient().build(); diff --git a/oauth2-authorization-server/src/test/java/org/springframework/security/oauth2/server/authorization/oidc/authentication/OidcClientRegistrationAuthenticationProviderTests.java b/oauth2-authorization-server/src/test/java/org/springframework/security/oauth2/server/authorization/oidc/authentication/OidcClientRegistrationAuthenticationProviderTests.java index 93e3a7c4..728f3c0e 100644 --- a/oauth2-authorization-server/src/test/java/org/springframework/security/oauth2/server/authorization/oidc/authentication/OidcClientRegistrationAuthenticationProviderTests.java +++ b/oauth2-authorization-server/src/test/java/org/springframework/security/oauth2/server/authorization/oidc/authentication/OidcClientRegistrationAuthenticationProviderTests.java @@ -117,28 +117,21 @@ public class OidcClientRegistrationAuthenticationProviderTests { @Test public void constructorWhenRegisteredClientRepositoryNullThenThrowIllegalArgumentException() { assertThatIllegalArgumentException() - .isThrownBy(() -> new OidcClientRegistrationAuthenticationProvider(null, this.authorizationService, this.jwtEncoder)) + .isThrownBy(() -> new OidcClientRegistrationAuthenticationProvider(null, this.authorizationService, this.tokenGenerator)) .withMessage("registeredClientRepository cannot be null"); } @Test public void constructorWhenAuthorizationServiceNullThenThrowIllegalArgumentException() { assertThatIllegalArgumentException() - .isThrownBy(() -> new OidcClientRegistrationAuthenticationProvider(this.registeredClientRepository, null, this.jwtEncoder)) + .isThrownBy(() -> new OidcClientRegistrationAuthenticationProvider(this.registeredClientRepository, null, this.tokenGenerator)) .withMessage("authorizationService cannot be null"); } - @Test - public void constructorWhenJwtEncoderNullThenThrowIllegalArgumentException() { - assertThatIllegalArgumentException() - .isThrownBy(() -> new OidcClientRegistrationAuthenticationProvider(this.registeredClientRepository, this.authorizationService, (JwtEncoder) null)) - .withMessage("jwtEncoder cannot be null"); - } - @Test public void constructorWhenTokenGeneratorNullThenThrowIllegalArgumentException() { assertThatIllegalArgumentException() - .isThrownBy(() -> new OidcClientRegistrationAuthenticationProvider(this.registeredClientRepository, this.authorizationService, (OAuth2TokenGenerator) null)) + .isThrownBy(() -> new OidcClientRegistrationAuthenticationProvider(this.registeredClientRepository, this.authorizationService, null)) .withMessage("tokenGenerator cannot be null"); }