|
1 | 1 | /*
|
2 |
| - * Copyright 2002-2018 the original author or authors. |
| 2 | + * Copyright 2002-2020 the original author or authors. |
3 | 3 | *
|
4 | 4 | * Licensed under the Apache License, Version 2.0 (the "License");
|
5 | 5 | * you may not use this file except in compliance with the License.
|
|
25 | 25 | import org.springframework.http.converter.HttpMessageConverter;
|
26 | 26 | import org.springframework.http.converter.HttpMessageNotReadableException;
|
27 | 27 | import org.springframework.http.converter.HttpMessageNotWritableException;
|
28 |
| -import org.springframework.security.oauth2.core.OAuth2AccessToken; |
29 | 28 | import org.springframework.security.oauth2.core.endpoint.OAuth2AccessTokenResponse;
|
30 |
| -import org.springframework.security.oauth2.core.endpoint.OAuth2ParameterNames; |
31 | 29 | import org.springframework.util.Assert;
|
32 |
| -import org.springframework.util.CollectionUtils; |
33 |
| -import org.springframework.util.StringUtils; |
34 | 30 |
|
35 | 31 | import java.nio.charset.Charset;
|
36 | 32 | import java.nio.charset.StandardCharsets;
|
37 |
| -import java.time.Instant; |
38 |
| -import java.time.temporal.ChronoUnit; |
39 |
| -import java.util.HashSet; |
40 | 33 | import java.util.Map;
|
41 |
| -import java.util.Set; |
42 |
| -import java.util.Arrays; |
43 |
| -import java.util.Collections; |
44 |
| -import java.util.LinkedHashMap; |
45 |
| -import java.util.HashMap; |
46 | 34 |
|
47 | 35 | /**
|
48 | 36 | * A {@link HttpMessageConverter} for an {@link OAuth2AccessTokenResponse OAuth 2.0 Access Token Response}.
|
@@ -125,93 +113,4 @@ public final void setTokenResponseParametersConverter(Converter<OAuth2AccessToke
|
125 | 113 | this.tokenResponseParametersConverter = tokenResponseParametersConverter;
|
126 | 114 | }
|
127 | 115 |
|
128 |
| - /** |
129 |
| - * A {@link Converter} that converts the provided |
130 |
| - * OAuth 2.0 Access Token Response parameters to an {@link OAuth2AccessTokenResponse}. |
131 |
| - */ |
132 |
| - private static class OAuth2AccessTokenResponseConverter implements Converter<Map<String, String>, OAuth2AccessTokenResponse> { |
133 |
| - private static final Set<String> TOKEN_RESPONSE_PARAMETER_NAMES = new HashSet<>(Arrays.asList( |
134 |
| - OAuth2ParameterNames.ACCESS_TOKEN, |
135 |
| - OAuth2ParameterNames.TOKEN_TYPE, |
136 |
| - OAuth2ParameterNames.EXPIRES_IN, |
137 |
| - OAuth2ParameterNames.REFRESH_TOKEN, |
138 |
| - OAuth2ParameterNames.SCOPE |
139 |
| - )); |
140 |
| - |
141 |
| - @Override |
142 |
| - public OAuth2AccessTokenResponse convert(Map<String, String> tokenResponseParameters) { |
143 |
| - String accessToken = tokenResponseParameters.get(OAuth2ParameterNames.ACCESS_TOKEN); |
144 |
| - |
145 |
| - OAuth2AccessToken.TokenType accessTokenType = null; |
146 |
| - if (OAuth2AccessToken.TokenType.BEARER.getValue().equalsIgnoreCase( |
147 |
| - tokenResponseParameters.get(OAuth2ParameterNames.TOKEN_TYPE))) { |
148 |
| - accessTokenType = OAuth2AccessToken.TokenType.BEARER; |
149 |
| - } |
150 |
| - |
151 |
| - long expiresIn = 0; |
152 |
| - if (tokenResponseParameters.containsKey(OAuth2ParameterNames.EXPIRES_IN)) { |
153 |
| - try { |
154 |
| - expiresIn = Long.parseLong(tokenResponseParameters.get(OAuth2ParameterNames.EXPIRES_IN)); |
155 |
| - } catch (NumberFormatException ex) { } |
156 |
| - } |
157 |
| - |
158 |
| - Set<String> scopes = Collections.emptySet(); |
159 |
| - if (tokenResponseParameters.containsKey(OAuth2ParameterNames.SCOPE)) { |
160 |
| - String scope = tokenResponseParameters.get(OAuth2ParameterNames.SCOPE); |
161 |
| - scopes = new HashSet<>(Arrays.asList(StringUtils.delimitedListToStringArray(scope, " "))); |
162 |
| - } |
163 |
| - |
164 |
| - String refreshToken = tokenResponseParameters.get(OAuth2ParameterNames.REFRESH_TOKEN); |
165 |
| - |
166 |
| - Map<String, Object> additionalParameters = new LinkedHashMap<>(); |
167 |
| - for (Map.Entry<String, String> entry : tokenResponseParameters.entrySet()) { |
168 |
| - if (!TOKEN_RESPONSE_PARAMETER_NAMES.contains(entry.getKey())) { |
169 |
| - additionalParameters.put(entry.getKey(), entry.getValue()); |
170 |
| - } |
171 |
| - } |
172 |
| - |
173 |
| - return OAuth2AccessTokenResponse.withToken(accessToken) |
174 |
| - .tokenType(accessTokenType) |
175 |
| - .expiresIn(expiresIn) |
176 |
| - .scopes(scopes) |
177 |
| - .refreshToken(refreshToken) |
178 |
| - .additionalParameters(additionalParameters) |
179 |
| - .build(); |
180 |
| - } |
181 |
| - } |
182 |
| - |
183 |
| - /** |
184 |
| - * A {@link Converter} that converts the provided {@link OAuth2AccessTokenResponse} |
185 |
| - * to a {@code Map} representation of the OAuth 2.0 Access Token Response parameters. |
186 |
| - */ |
187 |
| - private static class OAuth2AccessTokenResponseParametersConverter implements Converter<OAuth2AccessTokenResponse, Map<String, String>> { |
188 |
| - |
189 |
| - @Override |
190 |
| - public Map<String, String> convert(OAuth2AccessTokenResponse tokenResponse) { |
191 |
| - Map<String, String> parameters = new HashMap<>(); |
192 |
| - |
193 |
| - long expiresIn = -1; |
194 |
| - if (tokenResponse.getAccessToken().getExpiresAt() != null) { |
195 |
| - expiresIn = ChronoUnit.SECONDS.between(Instant.now(), tokenResponse.getAccessToken().getExpiresAt()); |
196 |
| - } |
197 |
| - |
198 |
| - parameters.put(OAuth2ParameterNames.ACCESS_TOKEN, tokenResponse.getAccessToken().getTokenValue()); |
199 |
| - parameters.put(OAuth2ParameterNames.TOKEN_TYPE, tokenResponse.getAccessToken().getTokenType().getValue()); |
200 |
| - parameters.put(OAuth2ParameterNames.EXPIRES_IN, String.valueOf(expiresIn)); |
201 |
| - if (!CollectionUtils.isEmpty(tokenResponse.getAccessToken().getScopes())) { |
202 |
| - parameters.put(OAuth2ParameterNames.SCOPE, |
203 |
| - StringUtils.collectionToDelimitedString(tokenResponse.getAccessToken().getScopes(), " ")); |
204 |
| - } |
205 |
| - if (tokenResponse.getRefreshToken() != null) { |
206 |
| - parameters.put(OAuth2ParameterNames.REFRESH_TOKEN, tokenResponse.getRefreshToken().getTokenValue()); |
207 |
| - } |
208 |
| - if (!CollectionUtils.isEmpty(tokenResponse.getAdditionalParameters())) { |
209 |
| - for (Map.Entry<String, Object> entry : tokenResponse.getAdditionalParameters().entrySet()) { |
210 |
| - parameters.put(entry.getKey(), entry.getValue().toString()); |
211 |
| - } |
212 |
| - } |
213 |
| - |
214 |
| - return parameters; |
215 |
| - } |
216 |
| - } |
217 | 116 | }
|
0 commit comments