11/*
2- * Copyright 2002-2024 the original author or authors.
2+ * Copyright 2002-2025 the original author or authors.
33 *
44 * Licensed under the Apache License, Version 2.0 (the "License");
55 * you may not use this file except in compliance with the License.
2020import java .time .Instant ;
2121import java .util .Arrays ;
2222import java .util .Collections ;
23- import java .util .HashMap ;
2423import java .util .HashSet ;
25- import java .util .Map ;
26- import java .util .Objects ;
27- import java .util .function .Consumer ;
2824
2925import jakarta .servlet .http .HttpServletRequest ;
3026import jakarta .servlet .http .HttpServletResponse ;
4844import org .springframework .security .oauth2 .client .OAuth2AuthorizeRequest ;
4945import org .springframework .security .oauth2 .client .OAuth2AuthorizedClient ;
5046import org .springframework .security .oauth2 .client .OAuth2AuthorizedClientManager ;
51- import org .springframework .security .oauth2 .client .PasswordOAuth2AuthorizedClientProvider ;
5247import org .springframework .security .oauth2 .client .RefreshTokenOAuth2AuthorizedClientProvider ;
5348import org .springframework .security .oauth2 .client .TokenExchangeOAuth2AuthorizedClientProvider ;
5449import org .springframework .security .oauth2 .client .endpoint .AbstractOAuth2AuthorizationGrantRequest ;
5550import org .springframework .security .oauth2 .client .endpoint .JwtBearerGrantRequest ;
5651import org .springframework .security .oauth2 .client .endpoint .OAuth2AccessTokenResponseClient ;
5752import org .springframework .security .oauth2 .client .endpoint .OAuth2AuthorizationCodeGrantRequest ;
5853import org .springframework .security .oauth2 .client .endpoint .OAuth2ClientCredentialsGrantRequest ;
59- import org .springframework .security .oauth2 .client .endpoint .OAuth2PasswordGrantRequest ;
6054import org .springframework .security .oauth2 .client .endpoint .OAuth2RefreshTokenGrantRequest ;
6155import org .springframework .security .oauth2 .client .endpoint .TokenExchangeGrantRequest ;
6256import org .springframework .security .oauth2 .client .registration .ClientRegistration ;
6357import org .springframework .security .oauth2 .client .registration .ClientRegistrationRepository ;
6458import org .springframework .security .oauth2 .client .registration .InMemoryClientRegistrationRepository ;
65- import org .springframework .security .oauth2 .client .web .DefaultOAuth2AuthorizedClientManager ;
6659import org .springframework .security .oauth2 .client .web .OAuth2AuthorizedClientRepository ;
6760import org .springframework .security .oauth2 .core .AuthorizationGrantType ;
6861import org .springframework .security .oauth2 .core .ClientAuthenticationMethod ;
7164import org .springframework .security .oauth2 .core .OAuth2Error ;
7265import org .springframework .security .oauth2 .core .TestOAuth2RefreshTokens ;
7366import org .springframework .security .oauth2 .core .endpoint .OAuth2AccessTokenResponse ;
74- import org .springframework .security .oauth2 .core .endpoint .OAuth2ParameterNames ;
7567import org .springframework .security .oauth2 .core .endpoint .TestOAuth2AccessTokenResponses ;
7668import org .springframework .security .oauth2 .jwt .JoseHeaderNames ;
7769import org .springframework .security .oauth2 .jwt .Jwt ;
7870import org .springframework .security .oauth2 .jwt .JwtClaimNames ;
7971import org .springframework .security .oauth2 .server .resource .authentication .JwtAuthenticationToken ;
80- import org .springframework .util .StringUtils ;
8172
8273import static org .assertj .core .api .Assertions .assertThat ;
8374import static org .assertj .core .api .Assertions .assertThatExceptionOfType ;
@@ -237,50 +228,6 @@ private void testClientCredentialsGrant() {
237228 assertThat (grantRequest .getGrantType ()).isEqualTo (AuthorizationGrantType .CLIENT_CREDENTIALS );
238229 }
239230
240- @ Test
241- public void authorizeWhenPasswordAccessTokenResponseClientBeanThenUsed () {
242- this .spring .register (CustomAccessTokenResponseClientsConfig .class ).autowire ();
243- testPasswordGrant ();
244- }
245-
246- @ Test
247- public void authorizeWhenPasswordAuthorizedClientProviderBeanThenUsed () {
248- this .spring .register (CustomAuthorizedClientProvidersConfig .class ).autowire ();
249- testPasswordGrant ();
250- }
251-
252- private void testPasswordGrant () {
253- OAuth2AccessTokenResponse accessTokenResponse = TestOAuth2AccessTokenResponses .accessTokenResponse ().build ();
254- given (MOCK_RESPONSE_CLIENT .getTokenResponse (any (OAuth2PasswordGrantRequest .class )))
255- .willReturn (accessTokenResponse );
256-
257- TestingAuthenticationToken authentication = new TestingAuthenticationToken ("user" , "password" );
258- ClientRegistration clientRegistration = this .clientRegistrationRepository .findByRegistrationId ("facebook" );
259- // @formatter:off
260- OAuth2AuthorizeRequest authorizeRequest = OAuth2AuthorizeRequest
261- .withClientRegistrationId (clientRegistration .getRegistrationId ())
262- .principal (authentication )
263- .attribute (HttpServletRequest .class .getName (), this .request )
264- .attribute (HttpServletResponse .class .getName (), this .response )
265- .build ();
266- // @formatter:on
267- this .request .setParameter (OAuth2ParameterNames .USERNAME , "user" );
268- this .request .setParameter (OAuth2ParameterNames .PASSWORD , "password" );
269- OAuth2AuthorizedClient authorizedClient = this .authorizedClientManager .authorize (authorizeRequest );
270- assertThat (authorizedClient ).isNotNull ();
271-
272- ArgumentCaptor <OAuth2PasswordGrantRequest > grantRequestCaptor = ArgumentCaptor
273- .forClass (OAuth2PasswordGrantRequest .class );
274- verify (MOCK_RESPONSE_CLIENT ).getTokenResponse (grantRequestCaptor .capture ());
275-
276- OAuth2PasswordGrantRequest grantRequest = grantRequestCaptor .getValue ();
277- assertThat (grantRequest .getClientRegistration ().getRegistrationId ())
278- .isEqualTo (clientRegistration .getRegistrationId ());
279- assertThat (grantRequest .getGrantType ()).isEqualTo (AuthorizationGrantType .PASSWORD );
280- assertThat (grantRequest .getUsername ()).isEqualTo ("user" );
281- assertThat (grantRequest .getPassword ()).isEqualTo ("password" );
282- }
283-
284231 @ Test
285232 public void authorizeWhenJwtBearerAccessTokenResponseClientBeanThenUsed () {
286233 this .spring .register (CustomAccessTokenResponseClientsConfig .class ).autowire ();
@@ -400,11 +347,6 @@ OAuth2AccessTokenResponseClient<OAuth2ClientCredentialsGrantRequest> clientCrede
400347 return new MockAccessTokenResponseClient <>();
401348 }
402349
403- @ Bean
404- OAuth2AccessTokenResponseClient <OAuth2PasswordGrantRequest > passwordTokenResponseClient () {
405- return new MockAccessTokenResponseClient <>();
406- }
407-
408350 @ Bean
409351 OAuth2AccessTokenResponseClient <JwtBearerGrantRequest > jwtBearerTokenResponseClient () {
410352 return new MockAccessTokenResponseClient <>();
@@ -440,13 +382,6 @@ ClientCredentialsOAuth2AuthorizedClientProvider clientCredentialsProvider() {
440382 return authorizedClientProvider ;
441383 }
442384
443- @ Bean
444- PasswordOAuth2AuthorizedClientProvider passwordProvider () {
445- PasswordOAuth2AuthorizedClientProvider authorizedClientProvider = new PasswordOAuth2AuthorizedClientProvider ();
446- authorizedClientProvider .setAccessTokenResponseClient (new MockAccessTokenResponseClient <>());
447- return authorizedClientProvider ;
448- }
449-
450385 @ Bean
451386 JwtBearerOAuth2AuthorizedClientProvider jwtBearerAuthorizedClientProvider () {
452387 JwtBearerOAuth2AuthorizedClientProvider authorizedClientProvider = new JwtBearerOAuth2AuthorizedClientProvider ();
@@ -479,11 +414,6 @@ ClientRegistrationRepository clientRegistrationRepository() {
479414 .clientSecret ("github-client-secret" )
480415 .authorizationGrantType (AuthorizationGrantType .CLIENT_CREDENTIALS )
481416 .build (),
482- CommonOAuth2Provider .FACEBOOK .getBuilder ("facebook" )
483- .clientId ("facebook-client-id" )
484- .clientSecret ("facebook-client-secret" )
485- .authorizationGrantType (AuthorizationGrantType .PASSWORD )
486- .build (),
487417 CommonOAuth2Provider .OKTA .getBuilder ("okta" )
488418 .clientId ("okta-client-id" )
489419 .clientSecret ("okta-client-secret" )
@@ -505,26 +435,6 @@ OAuth2AuthorizedClientRepository authorizedClientRepository() {
505435 return mock (OAuth2AuthorizedClientRepository .class );
506436 }
507437
508- @ Bean
509- Consumer <DefaultOAuth2AuthorizedClientManager > authorizedClientManagerConsumer () {
510- return (authorizedClientManager ) -> authorizedClientManager
511- .setContextAttributesMapper ((authorizeRequest ) -> {
512- HttpServletRequest request = Objects
513- .requireNonNull (authorizeRequest .getAttribute (HttpServletRequest .class .getName ()));
514- String username = request .getParameter (OAuth2ParameterNames .USERNAME );
515- String password = request .getParameter (OAuth2ParameterNames .PASSWORD );
516-
517- Map <String , Object > attributes = Collections .emptyMap ();
518- if (StringUtils .hasText (username ) && StringUtils .hasText (password )) {
519- attributes = new HashMap <>();
520- attributes .put (OAuth2AuthorizationContext .USERNAME_ATTRIBUTE_NAME , username );
521- attributes .put (OAuth2AuthorizationContext .PASSWORD_ATTRIBUTE_NAME , password );
522- }
523-
524- return attributes ;
525- });
526- }
527-
528438 }
529439
530440 private static class MockAccessTokenResponseClient <T extends AbstractOAuth2AuthorizationGrantRequest >
0 commit comments