|
@@ -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<? extends OAuth2Token> tokenGenerator;
|
|
|
|
|
|
- // TODO Remove after removing @Deprecated OAuth2RefreshTokenAuthenticationProvider(OAuth2AuthorizationService, JwtEncoder)
|
|
|
- private JwtGenerator jwtGenerator;
|
|
|
-
|
|
|
- @Deprecated
|
|
|
- private Supplier<String> 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<JwtEncodingContext> jwtCustomizer) {
|
|
|
- Assert.notNull(jwtCustomizer, "jwtCustomizer cannot be null");
|
|
|
- if (this.jwtGenerator != null) {
|
|
|
- this.jwtGenerator.setJwtCustomizer(jwtCustomizer);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * Sets the {@code Supplier<String>} that generates the value for the {@link OAuth2RefreshToken}.
|
|
|
- *
|
|
|
- * @deprecated Use {@link OAuth2RefreshTokenGenerator} instead
|
|
|
- * @param refreshTokenGenerator the {@code Supplier<String>} that generates the value for the {@link OAuth2RefreshToken}
|
|
|
- */
|
|
|
- @Deprecated
|
|
|
- public void setRefreshTokenGenerator(Supplier<String> 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);
|
|
|
}
|
|
|
|