@ -37,14 +37,13 @@ import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets ;
import java.nio.charset.StandardCharsets ;
import java.time.Instant ;
import java.time.Instant ;
import java.time.temporal.ChronoUnit ;
import java.time.temporal.ChronoUnit ;
import java.util.HashSet ;
import java.util.Map ;
import java.util.Set ;
import java.util.Arrays ;
import java.util.Arrays ;
import java.util.Collections ;
import java.util.Collections ;
import java.util.HashMap ;
import java.util.LinkedHashMap ;
import java.util.LinkedHashMap ;
import java.util.Map ;
import java.util.HashMap ;
import java.util.Set ;
import java.util.stream.Collectors ;
import java.util.stream.Stream ;
/ * *
/ * *
* A { @link HttpMessageConverter } for an { @link OAuth2AccessTokenResponse OAuth 2 . 0 Access Token Response } .
* A { @link HttpMessageConverter } for an { @link OAuth2AccessTokenResponse OAuth 2 . 0 Access Token Response } .
@ -132,12 +131,13 @@ public class OAuth2AccessTokenResponseHttpMessageConverter extends AbstractHttpM
* OAuth 2 . 0 Access Token Response parameters to an { @link OAuth2AccessTokenResponse } .
* OAuth 2 . 0 Access Token Response parameters to an { @link OAuth2AccessTokenResponse } .
* /
* /
private static class OAuth2AccessTokenResponseConverter implements Converter < Map < String , String > , OAuth2AccessTokenResponse > {
private static class OAuth2AccessTokenResponseConverter implements Converter < Map < String , String > , OAuth2AccessTokenResponse > {
private static final Set < String > TOKEN_RESPONSE_PARAMETER_NAMES = Stream . of (
private static final Set < String > TOKEN_RESPONSE_PARAMETER_NAMES = new HashSet < > ( Arrays . asList (
OAuth2ParameterNames . ACCESS_TOKEN ,
OAuth2ParameterNames . ACCESS_TOKEN ,
OAuth2ParameterNames . TOKEN_TYPE ,
OAuth2ParameterNames . TOKEN_TYPE ,
OAuth2ParameterNames . EXPIRES_IN ,
OAuth2ParameterNames . EXPIRES_IN ,
OAuth2ParameterNames . REFRESH_TOKEN ,
OAuth2ParameterNames . REFRESH_TOKEN ,
OAuth2ParameterNames . SCOPE ) . collect ( Collectors . toSet ( ) ) ;
OAuth2ParameterNames . SCOPE
) ) ;
@Override
@Override
public OAuth2AccessTokenResponse convert ( Map < String , String > tokenResponseParameters ) {
public OAuth2AccessTokenResponse convert ( Map < String , String > tokenResponseParameters ) {
@ -159,15 +159,17 @@ public class OAuth2AccessTokenResponseHttpMessageConverter extends AbstractHttpM
Set < String > scopes = Collections . emptySet ( ) ;
Set < String > scopes = Collections . emptySet ( ) ;
if ( tokenResponseParameters . containsKey ( OAuth2ParameterNames . SCOPE ) ) {
if ( tokenResponseParameters . containsKey ( OAuth2ParameterNames . SCOPE ) ) {
String scope = tokenResponseParameters . get ( OAuth2ParameterNames . SCOPE ) ;
String scope = tokenResponseParameters . get ( OAuth2ParameterNames . SCOPE ) ;
scopes = Arrays . stream ( StringUtils . delimitedListToStringArray ( scope , " " ) ) . collect ( Collectors . toSet ( ) ) ;
scopes = new HashSet < > ( Arrays . asList ( StringUtils . delimitedListToStringArray ( scope , " " ) ) ) ;
}
}
String refreshToken = tokenResponseParameters . get ( OAuth2ParameterNames . REFRESH_TOKEN ) ;
String refreshToken = tokenResponseParameters . get ( OAuth2ParameterNames . REFRESH_TOKEN ) ;
Map < String , Object > additionalParameters = new LinkedHashMap < > ( ) ;
Map < String , Object > additionalParameters = new LinkedHashMap < > ( ) ;
tokenResponseParameters . entrySet ( ) . stream ( )
for ( Map . Entry < String , String > entry : tokenResponseParameters . entrySet ( ) ) {
. filter ( e - > ! TOKEN_RESPONSE_PARAMETER_NAMES . contains ( e . getKey ( ) ) )
if ( ! TOKEN_RESPONSE_PARAMETER_NAMES . contains ( entry . getKey ( ) ) ) {
. forEach ( e - > additionalParameters . put ( e . getKey ( ) , e . getValue ( ) ) ) ;
additionalParameters . put ( entry . getKey ( ) , entry . getValue ( ) ) ;
}
}
return OAuth2AccessTokenResponse . withToken ( accessToken )
return OAuth2AccessTokenResponse . withToken ( accessToken )
. tokenType ( accessTokenType )
. tokenType ( accessTokenType )
@ -205,8 +207,9 @@ public class OAuth2AccessTokenResponseHttpMessageConverter extends AbstractHttpM
parameters . put ( OAuth2ParameterNames . REFRESH_TOKEN , tokenResponse . getRefreshToken ( ) . getTokenValue ( ) ) ;
parameters . put ( OAuth2ParameterNames . REFRESH_TOKEN , tokenResponse . getRefreshToken ( ) . getTokenValue ( ) ) ;
}
}
if ( ! CollectionUtils . isEmpty ( tokenResponse . getAdditionalParameters ( ) ) ) {
if ( ! CollectionUtils . isEmpty ( tokenResponse . getAdditionalParameters ( ) ) ) {
tokenResponse . getAdditionalParameters ( ) . entrySet ( ) . stream ( )
for ( Map . Entry < String , Object > entry : tokenResponse . getAdditionalParameters ( ) . entrySet ( ) ) {
. forEach ( e - > parameters . put ( e . getKey ( ) , e . getValue ( ) . toString ( ) ) ) ;
parameters . put ( entry . getKey ( ) , entry . getValue ( ) . toString ( ) ) ;
}
}
}
return parameters ;
return parameters ;