diff --git a/config/src/main/java/org/springframework/security/config/annotation/web/builders/HttpSecurity.java b/config/src/main/java/org/springframework/security/config/annotation/web/builders/HttpSecurity.java index 642e8fb33d..2f33a462e5 100644 --- a/config/src/main/java/org/springframework/security/config/annotation/web/builders/HttpSecurity.java +++ b/config/src/main/java/org/springframework/security/config/annotation/web/builders/HttpSecurity.java @@ -62,7 +62,7 @@ import org.springframework.security.core.context.SecurityContext; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.config.annotation.web.configurers.oauth2.client.OAuth2LoginConfigurer; -import org.springframework.security.oauth2.client.authentication.AuthorizationGrantTokenExchanger; +import org.springframework.security.oauth2.client.endpoint.AuthorizationGrantTokenExchanger; import org.springframework.security.oauth2.client.endpoint.AuthorizationRequestUriBuilder; import org.springframework.security.web.DefaultSecurityFilterChain; import org.springframework.security.web.PortMapper; diff --git a/config/src/main/java/org/springframework/security/config/annotation/web/configurers/oauth2/client/OAuth2LoginConfigurer.java b/config/src/main/java/org/springframework/security/config/annotation/web/configurers/oauth2/client/OAuth2LoginConfigurer.java index 14f4685e61..152672d40d 100644 --- a/config/src/main/java/org/springframework/security/config/annotation/web/configurers/oauth2/client/OAuth2LoginConfigurer.java +++ b/config/src/main/java/org/springframework/security/config/annotation/web/configurers/oauth2/client/OAuth2LoginConfigurer.java @@ -24,9 +24,9 @@ import org.springframework.security.core.authority.mapping.GrantedAuthoritiesMap import org.springframework.security.oauth2.client.InMemoryOAuth2AuthorizedClientService; import org.springframework.security.oauth2.client.OAuth2AuthorizedClient; import org.springframework.security.oauth2.client.OAuth2AuthorizedClientService; -import org.springframework.security.oauth2.client.authentication.AuthorizationGrantTokenExchanger; -import org.springframework.security.oauth2.client.authentication.NimbusAuthorizationCodeTokenExchanger; -import org.springframework.security.oauth2.client.authentication.OAuth2AuthorizationCodeAuthenticationToken; +import org.springframework.security.oauth2.client.endpoint.AuthorizationGrantTokenExchanger; +import org.springframework.security.oauth2.client.endpoint.NimbusAuthorizationCodeTokenExchanger; +import org.springframework.security.oauth2.client.endpoint.OAuth2AuthorizationCodeGrantRequest; import org.springframework.security.oauth2.client.authentication.OAuth2LoginAuthenticationProvider; import org.springframework.security.oauth2.client.endpoint.AuthorizationRequestUriBuilder; import org.springframework.security.oauth2.client.jwt.JwtDecoderRegistry; @@ -144,7 +144,7 @@ public final class OAuth2LoginConfigurer> exten } public class TokenEndpointConfig { - private AuthorizationGrantTokenExchanger authorizationCodeTokenExchanger; + private AuthorizationGrantTokenExchanger authorizationCodeTokenExchanger; private OAuth2TokenRepository accessTokenRepository; private JwtDecoderRegistry jwtDecoderRegistry; @@ -152,7 +152,7 @@ public final class OAuth2LoginConfigurer> exten } public TokenEndpointConfig authorizationCodeTokenExchanger( - AuthorizationGrantTokenExchanger authorizationCodeTokenExchanger) { + AuthorizationGrantTokenExchanger authorizationCodeTokenExchanger) { Assert.notNull(authorizationCodeTokenExchanger, "authorizationCodeTokenExchanger cannot be null"); this.authorizationCodeTokenExchanger = authorizationCodeTokenExchanger; @@ -237,7 +237,7 @@ public final class OAuth2LoginConfigurer> exten public void init(B http) throws Exception { super.init(http); - AuthorizationGrantTokenExchanger authorizationCodeTokenExchanger = + AuthorizationGrantTokenExchanger authorizationCodeTokenExchanger = this.tokenEndpointConfig.authorizationCodeTokenExchanger; if (authorizationCodeTokenExchanger == null) { authorizationCodeTokenExchanger = new NimbusAuthorizationCodeTokenExchanger(); diff --git a/oauth2/oauth2-client/src/main/java/org/springframework/security/oauth2/client/authentication/OAuth2LoginAuthenticationProvider.java b/oauth2/oauth2-client/src/main/java/org/springframework/security/oauth2/client/authentication/OAuth2LoginAuthenticationProvider.java index 7ec347e4b0..65c20fd023 100644 --- a/oauth2/oauth2-client/src/main/java/org/springframework/security/oauth2/client/authentication/OAuth2LoginAuthenticationProvider.java +++ b/oauth2/oauth2-client/src/main/java/org/springframework/security/oauth2/client/authentication/OAuth2LoginAuthenticationProvider.java @@ -21,6 +21,8 @@ import org.springframework.security.core.AuthenticationException; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.mapping.GrantedAuthoritiesMapper; import org.springframework.security.oauth2.client.OAuth2AuthorizedClient; +import org.springframework.security.oauth2.client.endpoint.AuthorizationGrantTokenExchanger; +import org.springframework.security.oauth2.client.endpoint.OAuth2AuthorizationCodeGrantRequest; import org.springframework.security.oauth2.client.userinfo.OAuth2UserRequest; import org.springframework.security.oauth2.client.userinfo.OAuth2UserService; import org.springframework.security.oauth2.core.OAuth2AccessToken; @@ -60,12 +62,12 @@ import java.util.Collection; public class OAuth2LoginAuthenticationProvider implements AuthenticationProvider { private static final String INVALID_STATE_PARAMETER_ERROR_CODE = "invalid_state_parameter"; private static final String INVALID_REDIRECT_URI_PARAMETER_ERROR_CODE = "invalid_redirect_uri_parameter"; - private final AuthorizationGrantTokenExchanger authorizationCodeTokenExchanger; + private final AuthorizationGrantTokenExchanger authorizationCodeTokenExchanger; private final OAuth2UserService userService; private GrantedAuthoritiesMapper authoritiesMapper = (authorities -> authorities); public OAuth2LoginAuthenticationProvider( - AuthorizationGrantTokenExchanger authorizationCodeTokenExchanger, + AuthorizationGrantTokenExchanger authorizationCodeTokenExchanger, OAuth2UserService userService) { Assert.notNull(authorizationCodeTokenExchanger, "authorizationCodeTokenExchanger cannot be null"); @@ -110,7 +112,10 @@ public class OAuth2LoginAuthenticationProvider implements AuthenticationProvider } OAuth2AccessTokenResponse accessTokenResponse = - this.authorizationCodeTokenExchanger.exchange(authorizationCodeAuthentication); + this.authorizationCodeTokenExchanger.exchange( + new OAuth2AuthorizationCodeGrantRequest( + authorizationCodeAuthentication.getClientRegistration(), + authorizationCodeAuthentication.getAuthorizationExchange())); OAuth2AccessToken accessToken = new OAuth2AccessToken(accessTokenResponse.getTokenType(), accessTokenResponse.getTokenValue(), accessTokenResponse.getIssuedAt(), diff --git a/oauth2/oauth2-client/src/main/java/org/springframework/security/oauth2/client/endpoint/AbstractOAuth2AuthorizationGrantRequest.java b/oauth2/oauth2-client/src/main/java/org/springframework/security/oauth2/client/endpoint/AbstractOAuth2AuthorizationGrantRequest.java new file mode 100644 index 0000000000..fe61579eb5 --- /dev/null +++ b/oauth2/oauth2-client/src/main/java/org/springframework/security/oauth2/client/endpoint/AbstractOAuth2AuthorizationGrantRequest.java @@ -0,0 +1,42 @@ +/* + * Copyright 2002-2017 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 + * + * http://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.client.endpoint; + +import org.springframework.security.oauth2.core.AuthorizationGrantType; +import org.springframework.util.Assert; + +/** + * Base implementation of an OAuth 2.0 Authorization Grant request + * that holds an authorization grant credential and is used when + * initiating a HTTP request to the Authorization Server's Token Endpoint. + * + * @author Joe Grandja + * @since 5.0 + * @see AuthorizationGrantType + * @see Section 1.3 Authorization Grant + */ +public abstract class AbstractOAuth2AuthorizationGrantRequest { + private final AuthorizationGrantType authorizationGrantType; + + protected AbstractOAuth2AuthorizationGrantRequest(AuthorizationGrantType authorizationGrantType) { + Assert.notNull(authorizationGrantType, "authorizationGrantType cannot be null"); + this.authorizationGrantType = authorizationGrantType; + } + + public AuthorizationGrantType getGrantType() { + return this.authorizationGrantType; + } +} diff --git a/oauth2/oauth2-client/src/main/java/org/springframework/security/oauth2/client/authentication/AuthorizationGrantTokenExchanger.java b/oauth2/oauth2-client/src/main/java/org/springframework/security/oauth2/client/endpoint/AuthorizationGrantTokenExchanger.java similarity index 72% rename from oauth2/oauth2-client/src/main/java/org/springframework/security/oauth2/client/authentication/AuthorizationGrantTokenExchanger.java rename to oauth2/oauth2-client/src/main/java/org/springframework/security/oauth2/client/endpoint/AuthorizationGrantTokenExchanger.java index 51b45690b0..c54d1696c3 100644 --- a/oauth2/oauth2-client/src/main/java/org/springframework/security/oauth2/client/authentication/AuthorizationGrantTokenExchanger.java +++ b/oauth2/oauth2-client/src/main/java/org/springframework/security/oauth2/client/endpoint/AuthorizationGrantTokenExchanger.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.security.oauth2.client.authentication; +package org.springframework.security.oauth2.client.endpoint; import org.springframework.security.oauth2.core.AuthorizationGrantType; @@ -21,21 +21,21 @@ import org.springframework.security.oauth2.core.OAuth2AuthenticationException; import org.springframework.security.oauth2.core.endpoint.OAuth2AccessTokenResponse; /** - * Implementations of this interface are responsible for "exchanging" - * an authorization grant credential (for example, an authorization code) for an - * access token credential at the authorization server's Token Endpoint. + * A strategy for "exchanging" an Authorization Grant credential + * (e.g. an Authorization Code) for an Access Token credential + * at the Authorization Server's Token Endpoint. * * @author Joe Grandja * @since 5.0 - * @see AuthorizationGrantType - * @see AbstractOAuth2AuthorizationGrantAuthenticationToken + * @see AbstractOAuth2AuthorizationGrantRequest * @see OAuth2AccessTokenResponse + * @see AuthorizationGrantType * @see Section 1.3 Authorization Grant * @see Section 4.1.3 Access Token Request (Authorization Code Grant) * @see Section 4.1.4 Access Token Response (Authorization Code Grant) */ -public interface AuthorizationGrantTokenExchanger { +public interface AuthorizationGrantTokenExchanger { - OAuth2AccessTokenResponse exchange(T authorizationGrantAuthentication) throws OAuth2AuthenticationException; + OAuth2AccessTokenResponse exchange(T authorizationGrantRequest) throws OAuth2AuthenticationException; } diff --git a/oauth2/oauth2-client/src/main/java/org/springframework/security/oauth2/client/authentication/NimbusAuthorizationCodeTokenExchanger.java b/oauth2/oauth2-client/src/main/java/org/springframework/security/oauth2/client/endpoint/NimbusAuthorizationCodeTokenExchanger.java similarity index 91% rename from oauth2/oauth2-client/src/main/java/org/springframework/security/oauth2/client/authentication/NimbusAuthorizationCodeTokenExchanger.java rename to oauth2/oauth2-client/src/main/java/org/springframework/security/oauth2/client/endpoint/NimbusAuthorizationCodeTokenExchanger.java index de9aaa6c5e..5a7e16d81e 100644 --- a/oauth2/oauth2-client/src/main/java/org/springframework/security/oauth2/client/authentication/NimbusAuthorizationCodeTokenExchanger.java +++ b/oauth2/oauth2-client/src/main/java/org/springframework/security/oauth2/client/endpoint/NimbusAuthorizationCodeTokenExchanger.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.security.oauth2.client.authentication; +package org.springframework.security.oauth2.client.endpoint; import com.nimbusds.oauth2.sdk.AccessTokenResponse; @@ -33,8 +33,8 @@ import com.nimbusds.oauth2.sdk.id.ClientID; import org.springframework.http.MediaType; import org.springframework.security.authentication.AuthenticationServiceException; import org.springframework.security.oauth2.client.registration.ClientRegistration; -import org.springframework.security.oauth2.core.OAuth2AccessToken; import org.springframework.security.oauth2.core.ClientAuthenticationMethod; +import org.springframework.security.oauth2.core.OAuth2AccessToken; import org.springframework.security.oauth2.core.OAuth2AuthenticationException; import org.springframework.security.oauth2.core.OAuth2Error; import org.springframework.security.oauth2.core.endpoint.OAuth2AccessTokenResponse; @@ -49,8 +49,8 @@ import java.util.Set; /** * An implementation of an {@link AuthorizationGrantTokenExchanger} that "exchanges" - * an authorization code credential for an access token credential - * at the authorization server's Token Endpoint. + * an Authorization Code credential for an Access Token credential + * at the Authorization Server's Token Endpoint. * *

* NOTE: This implementation uses the Nimbus OAuth 2.0 SDK internally. @@ -58,24 +58,24 @@ import java.util.Set; * @author Joe Grandja * @since 5.0 * @see AuthorizationGrantTokenExchanger - * @see OAuth2AuthorizationCodeAuthenticationToken + * @see OAuth2AuthorizationCodeGrantRequest * @see OAuth2AccessTokenResponse * @see Nimbus OAuth 2.0 SDK * @see Section 4.1.3 Access Token Request (Authorization Code Grant) * @see Section 4.1.4 Access Token Response (Authorization Code Grant) */ -public class NimbusAuthorizationCodeTokenExchanger implements AuthorizationGrantTokenExchanger { +public class NimbusAuthorizationCodeTokenExchanger implements AuthorizationGrantTokenExchanger { private static final String INVALID_TOKEN_RESPONSE_ERROR_CODE = "invalid_token_response"; @Override - public OAuth2AccessTokenResponse exchange(OAuth2AuthorizationCodeAuthenticationToken authorizationCodeAuthentication) + public OAuth2AccessTokenResponse exchange(OAuth2AuthorizationCodeGrantRequest authorizationGrantRequest) throws OAuth2AuthenticationException { - ClientRegistration clientRegistration = authorizationCodeAuthentication.getClientRegistration(); + ClientRegistration clientRegistration = authorizationGrantRequest.getClientRegistration(); // Build the authorization code grant request for the token endpoint AuthorizationCode authorizationCode = new AuthorizationCode( - authorizationCodeAuthentication.getAuthorizationExchange().getAuthorizationResponse().getCode()); + authorizationGrantRequest.getAuthorizationExchange().getAuthorizationResponse().getCode()); URI redirectUri = toURI(clientRegistration.getRedirectUri()); AuthorizationGrant authorizationCodeGrant = new AuthorizationCodeGrant(authorizationCode, redirectUri); URI tokenUri = toURI(clientRegistration.getProviderDetails().getTokenUri()); @@ -130,7 +130,7 @@ public class NimbusAuthorizationCodeTokenExchanger implements AuthorizationGrant Set scopes; if (CollectionUtils.isEmpty(accessTokenResponse.getTokens().getAccessToken().getScope())) { scopes = new LinkedHashSet<>( - authorizationCodeAuthentication.getAuthorizationExchange().getAuthorizationRequest().getScopes()); + authorizationGrantRequest.getAuthorizationExchange().getAuthorizationRequest().getScopes()); } else { scopes = new LinkedHashSet<>( accessTokenResponse.getTokens().getAccessToken().getScope().toStringList()); diff --git a/oauth2/oauth2-client/src/main/java/org/springframework/security/oauth2/client/endpoint/OAuth2AuthorizationCodeGrantRequest.java b/oauth2/oauth2-client/src/main/java/org/springframework/security/oauth2/client/endpoint/OAuth2AuthorizationCodeGrantRequest.java new file mode 100644 index 0000000000..3423894078 --- /dev/null +++ b/oauth2/oauth2-client/src/main/java/org/springframework/security/oauth2/client/endpoint/OAuth2AuthorizationCodeGrantRequest.java @@ -0,0 +1,54 @@ +/* + * Copyright 2002-2017 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 + * + * http://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.client.endpoint; + +import org.springframework.security.oauth2.client.registration.ClientRegistration; +import org.springframework.security.oauth2.core.AuthorizationGrantType; +import org.springframework.security.oauth2.core.endpoint.OAuth2AuthorizationExchange; +import org.springframework.util.Assert; + +/** + * An OAuth 2.0 Authorization Code Grant request that holds an Authorization Code credential, + * which was granted by the Resource Owner to the specified {@link #getClientRegistration() Client}. + * + * @author Joe Grandja + * @since 5.0 + * @see AbstractOAuth2AuthorizationGrantRequest + * @see ClientRegistration + * @see OAuth2AuthorizationExchange + * @see Section 1.3.1 Authorization Code Grant + */ +public class OAuth2AuthorizationCodeGrantRequest extends AbstractOAuth2AuthorizationGrantRequest { + private final ClientRegistration clientRegistration; + private final OAuth2AuthorizationExchange authorizationExchange; + + public OAuth2AuthorizationCodeGrantRequest(ClientRegistration clientRegistration, + OAuth2AuthorizationExchange authorizationExchange) { + super(AuthorizationGrantType.AUTHORIZATION_CODE); + Assert.notNull(clientRegistration, "clientRegistration cannot be null"); + Assert.notNull(authorizationExchange, "authorizationExchange cannot be null"); + this.clientRegistration = clientRegistration; + this.authorizationExchange = authorizationExchange; + } + + public ClientRegistration getClientRegistration() { + return this.clientRegistration; + } + + public OAuth2AuthorizationExchange getAuthorizationExchange() { + return this.authorizationExchange; + } +} diff --git a/oauth2/oauth2-client/src/main/java/org/springframework/security/oauth2/client/oidc/authentication/OidcAuthorizationCodeAuthenticationProvider.java b/oauth2/oauth2-client/src/main/java/org/springframework/security/oauth2/client/oidc/authentication/OidcAuthorizationCodeAuthenticationProvider.java index c2f8ad4840..b5b57cffb4 100644 --- a/oauth2/oauth2-client/src/main/java/org/springframework/security/oauth2/client/oidc/authentication/OidcAuthorizationCodeAuthenticationProvider.java +++ b/oauth2/oauth2-client/src/main/java/org/springframework/security/oauth2/client/oidc/authentication/OidcAuthorizationCodeAuthenticationProvider.java @@ -20,9 +20,10 @@ import org.springframework.security.core.Authentication; import org.springframework.security.core.AuthenticationException; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.mapping.GrantedAuthoritiesMapper; -import org.springframework.security.oauth2.client.authentication.AuthorizationGrantTokenExchanger; +import org.springframework.security.oauth2.client.endpoint.AuthorizationGrantTokenExchanger; import org.springframework.security.oauth2.client.authentication.OAuth2AuthenticationToken; import org.springframework.security.oauth2.client.authentication.OAuth2AuthorizationCodeAuthenticationToken; +import org.springframework.security.oauth2.client.endpoint.OAuth2AuthorizationCodeGrantRequest; import org.springframework.security.oauth2.client.jwt.JwtDecoderRegistry; import org.springframework.security.oauth2.client.oidc.OidcAuthorizedClient; import org.springframework.security.oauth2.client.oidc.userinfo.OidcUserRequest; @@ -76,13 +77,13 @@ public class OidcAuthorizationCodeAuthenticationProvider implements Authenticati private static final String INVALID_STATE_PARAMETER_ERROR_CODE = "invalid_state_parameter"; private static final String INVALID_REDIRECT_URI_PARAMETER_ERROR_CODE = "invalid_redirect_uri_parameter"; private static final String INVALID_ID_TOKEN_ERROR_CODE = "invalid_id_token"; - private final AuthorizationGrantTokenExchanger authorizationCodeTokenExchanger; + private final AuthorizationGrantTokenExchanger authorizationCodeTokenExchanger; private final OAuth2UserService userService; private final JwtDecoderRegistry jwtDecoderRegistry; private GrantedAuthoritiesMapper authoritiesMapper = (authorities -> authorities); public OidcAuthorizationCodeAuthenticationProvider( - AuthorizationGrantTokenExchanger authorizationCodeTokenExchanger, + AuthorizationGrantTokenExchanger authorizationCodeTokenExchanger, OAuth2UserService userService, JwtDecoderRegistry jwtDecoderRegistry) { @@ -130,7 +131,10 @@ public class OidcAuthorizationCodeAuthenticationProvider implements Authenticati } OAuth2AccessTokenResponse accessTokenResponse = - this.authorizationCodeTokenExchanger.exchange(authorizationCodeAuthentication); + this.authorizationCodeTokenExchanger.exchange( + new OAuth2AuthorizationCodeGrantRequest( + authorizationCodeAuthentication.getClientRegistration(), + authorizationCodeAuthentication.getAuthorizationExchange())); OAuth2AccessToken accessToken = new OAuth2AccessToken(accessTokenResponse.getTokenType(), accessTokenResponse.getTokenValue(), accessTokenResponse.getIssuedAt(), diff --git a/samples/boot/oauth2login/src/integration-test/java/org/springframework/security/samples/OAuth2LoginApplicationTests.java b/samples/boot/oauth2login/src/integration-test/java/org/springframework/security/samples/OAuth2LoginApplicationTests.java index 51735a500f..e87c1a5a97 100644 --- a/samples/boot/oauth2login/src/integration-test/java/org/springframework/security/samples/OAuth2LoginApplicationTests.java +++ b/samples/boot/oauth2login/src/integration-test/java/org/springframework/security/samples/OAuth2LoginApplicationTests.java @@ -36,17 +36,17 @@ import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; import org.springframework.security.core.GrantedAuthority; -import org.springframework.security.oauth2.client.authentication.OAuth2AuthorizationCodeAuthenticationToken; -import org.springframework.security.oauth2.client.authentication.AuthorizationGrantTokenExchanger; -import org.springframework.security.oauth2.client.userinfo.OAuth2UserService; +import org.springframework.security.oauth2.client.endpoint.AuthorizationGrantTokenExchanger; +import org.springframework.security.oauth2.client.endpoint.OAuth2AuthorizationCodeGrantRequest; import org.springframework.security.oauth2.client.registration.ClientRegistration; import org.springframework.security.oauth2.client.registration.ClientRegistrationRepository; +import org.springframework.security.oauth2.client.userinfo.OAuth2UserService; import org.springframework.security.oauth2.client.web.OAuth2AuthorizationRequestRedirectFilter; import org.springframework.security.oauth2.client.web.OAuth2LoginAuthenticationFilter; import org.springframework.security.oauth2.core.OAuth2AccessToken; -import org.springframework.security.oauth2.core.endpoint.OAuth2ParameterNames; -import org.springframework.security.oauth2.core.endpoint.OAuth2AuthorizationResponseType; import org.springframework.security.oauth2.core.endpoint.OAuth2AccessTokenResponse; +import org.springframework.security.oauth2.core.endpoint.OAuth2AuthorizationResponseType; +import org.springframework.security.oauth2.core.endpoint.OAuth2ParameterNames; import org.springframework.security.oauth2.core.user.DefaultOAuth2User; import org.springframework.security.oauth2.core.user.OAuth2UserAuthority; import org.springframework.test.context.junit4.SpringRunner; @@ -354,7 +354,7 @@ public class OAuth2LoginApplicationTests { } // @formatter:on - private AuthorizationGrantTokenExchanger mockAuthorizationCodeTokenExchanger() { + private AuthorizationGrantTokenExchanger mockAuthorizationCodeTokenExchanger() { OAuth2AccessTokenResponse accessTokenResponse = OAuth2AccessTokenResponse.withToken("access-token-1234") .tokenType(OAuth2AccessToken.TokenType.BEARER) .expiresIn(60 * 1000)