2525import org .springframework .security .oauth2 .client .token .grant .code .AuthorizationCodeAccessTokenProvider ;
2626import org .springframework .security .oauth2 .client .token .grant .code .AuthorizationCodeResourceDetails ;
2727import org .springframework .security .oauth2 .common .OAuth2AccessToken ;
28- import org .springframework .security .oauth2 .common .OAuth2RefreshToken ;
2928import org .springframework .security .oauth2 .common .exceptions .InvalidRequestException ;
3029import org .springframework .security .oauth2 .common .util .OAuth2Utils ;
3130import org .springframework .util .LinkedMultiValueMap ;
3231import org .springframework .util .MultiValueMap ;
3332import org .springframework .web .client .ResponseExtractor ;
3433
34+ import com .google .common .base .Joiner ;
35+
3536public class MyAuthorizationCodeAccessTokenProvider extends AuthorizationCodeAccessTokenProvider {
3637
3738 private StateKeyGenerator stateKeyGenerator = new DefaultStateKeyGenerator ();
@@ -42,7 +43,6 @@ public class MyAuthorizationCodeAccessTokenProvider extends AuthorizationCodeAcc
4243
4344 @ Override
4445 public String obtainAuthorizationCode (OAuth2ProtectedResourceDetails details , AccessTokenRequest request ) throws UserRedirectRequiredException , UserApprovalRequiredException , AccessDeniedException , OAuth2AccessDeniedException {
45-
4646 AuthorizationCodeResourceDetails resource = (AuthorizationCodeResourceDetails ) details ;
4747
4848 HttpHeaders headers = getHeadersForAuthorizationRequest (request );
@@ -97,12 +97,10 @@ public ResponseEntity<Void> extractData(ClientHttpResponse response) throws IOEx
9797 }
9898 request .set ("code" , code );
9999 return code ;
100-
101100 }
102101
103102 @ Override
104103 public OAuth2AccessToken obtainAccessToken (OAuth2ProtectedResourceDetails details , AccessTokenRequest request ) throws UserRedirectRequiredException , UserApprovalRequiredException , AccessDeniedException , OAuth2AccessDeniedException {
105-
106104 AuthorizationCodeResourceDetails resource = (AuthorizationCodeResourceDetails ) details ;
107105
108106 if (request .getAuthorizationCode () == null ) {
@@ -112,24 +110,10 @@ public OAuth2AccessToken obtainAccessToken(OAuth2ProtectedResourceDetails detail
112110 obtainAuthorizationCode (resource , request );
113111 }
114112 return retrieveToken (request , resource , getParametersForTokenRequest (resource , request ), getHeadersForTokenRequest (request ));
115-
116- }
117-
118- @ Override
119- public OAuth2AccessToken refreshAccessToken (OAuth2ProtectedResourceDetails resource , OAuth2RefreshToken refreshToken , AccessTokenRequest request ) throws UserRedirectRequiredException , OAuth2AccessDeniedException {
120- MultiValueMap <String , String > form = new LinkedMultiValueMap <String , String >();
121- form .add ("grant_type" , "refresh_token" );
122- form .add ("refresh_token" , refreshToken .getValue ());
123- try {
124- return retrieveToken (request , resource , form , getHeadersForTokenRequest (request ));
125- } catch (OAuth2AccessDeniedException e ) {
126- throw getRedirectForAuthorization ((AuthorizationCodeResourceDetails ) resource , request );
127- }
128113 }
129114
130115 private HttpHeaders getHeadersForTokenRequest (AccessTokenRequest request ) {
131116 HttpHeaders headers = new HttpHeaders ();
132- // No cookie for token request
133117 return headers ;
134118 }
135119
@@ -143,7 +127,6 @@ private HttpHeaders getHeadersForAuthorizationRequest(AccessTokenRequest request
143127 }
144128
145129 private MultiValueMap <String , String > getParametersForTokenRequest (AuthorizationCodeResourceDetails resource , AccessTokenRequest request ) {
146-
147130 MultiValueMap <String , String > form = new LinkedMultiValueMap <String , String >();
148131 form .set ("grant_type" , "authorization_code" );
149132 form .set ("code" , request .getAuthorizationCode ());
@@ -167,19 +150,17 @@ private MultiValueMap<String, String> getParametersForTokenRequest(Authorization
167150 }
168151
169152 return form ;
170-
171153 }
172154
173155 private MultiValueMap <String , String > getParametersForAuthorizeRequest (AuthorizationCodeResourceDetails resource , AccessTokenRequest request ) {
174-
175156 MultiValueMap <String , String > form = new LinkedMultiValueMap <String , String >();
176157 form .set ("response_type" , "code" );
177158 form .set ("client_id" , resource .getClientId ());
178159
179160 if (request .get ("scope" ) != null ) {
180161 form .set ("scope" , request .getFirst ("scope" ));
181162 } else {
182- form .set ("scope" , OAuth2Utils . formatParameterList (resource .getScope ()));
163+ form .set ("scope" , Joiner . on ( ',' ). join (resource .getScope ()));
183164 }
184165
185166 String redirectUri = resource .getPreEstablishedRedirectUri ();
@@ -204,17 +185,13 @@ private MultiValueMap<String, String> getParametersForAuthorizeRequest(Authoriza
204185 }
205186
206187 return form ;
207-
208188 }
209189
210190 private UserRedirectRequiredException getRedirectForAuthorization (AuthorizationCodeResourceDetails resource , AccessTokenRequest request ) {
211-
212- // we don't have an authorization code yet. So first get that.
213191 TreeMap <String , String > requestParameters = new TreeMap <String , String >();
214- requestParameters .put ("response_type" , "code" ); // oauth2 spec, section 3
192+ requestParameters .put ("response_type" , "code" );
215193 requestParameters .put ("client_id" , resource .getClientId ());
216194 requestParameters .put ("duration" , "permanent" );
217- // Client secret is not required in the initial authorization request
218195
219196 String redirectUri = resource .getRedirectUri (request );
220197 if (redirectUri != null ) {
@@ -231,7 +208,7 @@ private UserRedirectRequiredException getRedirectForAuthorization(AuthorizationC
231208 while (scopeIt .hasNext ()) {
232209 builder .append (scopeIt .next ());
233210 if (scopeIt .hasNext ()) {
234- builder .append (' ' );
211+ builder .append (', ' );
235212 }
236213 }
237214 }
@@ -248,7 +225,6 @@ private UserRedirectRequiredException getRedirectForAuthorization(AuthorizationC
248225 request .setPreservedState (redirectUri );
249226
250227 return redirectException ;
251-
252228 }
253229
254230}
0 commit comments