66import org .springframework .security .oauth2 .client .web .DefaultOAuth2AuthorizationRequestResolver ;
77import org .springframework .security .oauth2 .client .web .OAuth2AuthorizationRequestResolver ;
88import org .springframework .security .oauth2 .core .endpoint .OAuth2AuthorizationRequest ;
9+ import org .springframework .web .util .UriComponentsBuilder ;
910
1011@ RequiredArgsConstructor
1112public class AppleAwareOAuth2AuthorizationRequestResolver
@@ -36,9 +37,7 @@ public OAuth2AuthorizationRequest resolve(
3637 return null ;
3738 }
3839 return "apple" .equals (clientRegistrationId )
39- ? OAuth2AuthorizationRequest .from (authorizationRequest )
40- .additionalParameters (params -> params .put ("response_mode" , "form_post" ))
41- .build ()
40+ ? enforceAppleResponseMode (authorizationRequest )
4241 : authorizationRequest ;
4342 }
4443
@@ -55,10 +54,23 @@ private OAuth2AuthorizationRequest customizeIfApple(
5554 }
5655 String requestUri = request .getRequestURI ();
5756 if (requestUri != null && requestUri .endsWith ("/apple" )) {
58- return OAuth2AuthorizationRequest .from (authorizationRequest )
59- .additionalParameters (params -> params .put ("response_mode" , "form_post" ))
60- .build ();
57+ return enforceAppleResponseMode (authorizationRequest );
6158 }
6259 return authorizationRequest ;
6360 }
61+
62+ private OAuth2AuthorizationRequest enforceAppleResponseMode (
63+ OAuth2AuthorizationRequest authorizationRequest ) {
64+ String authorizationRequestUri =
65+ UriComponentsBuilder .fromUriString (
66+ authorizationRequest .getAuthorizationRequestUri ())
67+ .replaceQueryParam ("response_mode" , "form_post" )
68+ .build (true )
69+ .toUriString ();
70+
71+ return OAuth2AuthorizationRequest .from (authorizationRequest )
72+ .additionalParameters (params -> params .put ("response_mode" , "form_post" ))
73+ .authorizationRequestUri (authorizationRequestUri )
74+ .build ();
75+ }
6476}
0 commit comments