Skip to content

Commit 171522e

Browse files
ascopesjzheaux
authored andcommitted
Replace usages of deprecated OAuth2IntrospectionClaimNames
Replace all usages of OAuth2IntrospectionClaimNames with the suggested OAuth2TokenIntrospectionClaimNames. There does not appear to be any further usages of OAuth2IntrospectionClaimNames, so it should be suitable for removal when appropriate in accordance with the deprecation policy.
1 parent 7ccc915 commit 171522e

File tree

3 files changed

+30
-25
lines changed

3 files changed

+30
-25
lines changed

oauth2/oauth2-resource-server/src/main/java/org/springframework/security/oauth2/server/resource/introspection/NimbusReactiveOpaqueTokenIntrospector.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ private Mono<HTTPResponse> adaptToNimbusResponse(ClientResponse responseEntity)
121121
MediaType contentType = responseEntity.headers().contentType().orElseThrow(() -> {
122122
this.logger.trace("Did not receive Content-Type from introspection endpoint in response");
123123

124-
throw new OAuth2IntrospectionException(
124+
return new OAuth2IntrospectionException(
125125
"Introspection endpoint response was invalid, as no Content-Type header was provided");
126126
});
127127

oauth2/oauth2-resource-server/src/main/java/org/springframework/security/oauth2/server/resource/introspection/SpringReactiveOpaqueTokenIntrospector.java

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
import org.springframework.security.core.GrantedAuthority;
3636
import org.springframework.security.core.authority.SimpleGrantedAuthority;
3737
import org.springframework.security.oauth2.core.OAuth2AuthenticatedPrincipal;
38+
import org.springframework.security.oauth2.core.OAuth2TokenIntrospectionClaimNames;
3839
import org.springframework.util.Assert;
3940
import org.springframework.web.reactive.function.BodyInserters;
4041
import org.springframework.web.reactive.function.client.ClientResponse;
@@ -122,7 +123,7 @@ private Mono<Map<String, Object>> adaptToNimbusResponse(ClientResponse responseE
122123
// relying solely on the authorization server to validate this token (not checking
123124
// 'exp', for example)
124125
return responseEntity.bodyToMono(STRING_OBJECT_MAP)
125-
.filter((body) -> (boolean) body.compute(OAuth2IntrospectionClaimNames.ACTIVE, (k, v) -> {
126+
.filter((body) -> (boolean) body.compute(OAuth2TokenIntrospectionClaimNames.ACTIVE, (k, v) -> {
126127
if (v instanceof String) {
127128
return Boolean.parseBoolean((String) v);
128129
}
@@ -134,16 +135,16 @@ private Mono<Map<String, Object>> adaptToNimbusResponse(ClientResponse responseE
134135
}
135136

136137
private OAuth2AuthenticatedPrincipal convertClaimsSet(Map<String, Object> claims) {
137-
claims.computeIfPresent(OAuth2IntrospectionClaimNames.AUDIENCE, (k, v) -> {
138+
claims.computeIfPresent(OAuth2TokenIntrospectionClaimNames.AUD, (k, v) -> {
138139
if (v instanceof String) {
139140
return Collections.singletonList(v);
140141
}
141142
return v;
142143
});
143-
claims.computeIfPresent(OAuth2IntrospectionClaimNames.CLIENT_ID, (k, v) -> v.toString());
144-
claims.computeIfPresent(OAuth2IntrospectionClaimNames.EXPIRES_AT,
144+
claims.computeIfPresent(OAuth2TokenIntrospectionClaimNames.CLIENT_ID, (k, v) -> v.toString());
145+
claims.computeIfPresent(OAuth2TokenIntrospectionClaimNames.EXP,
145146
(k, v) -> Instant.ofEpochSecond(((Number) v).longValue()));
146-
claims.computeIfPresent(OAuth2IntrospectionClaimNames.ISSUED_AT,
147+
claims.computeIfPresent(OAuth2TokenIntrospectionClaimNames.IAT,
147148
(k, v) -> Instant.ofEpochSecond(((Number) v).longValue()));
148149
// RFC-7662 page 7 directs users to RFC-7519 for defining the values of these
149150
// issuer fields.
@@ -163,11 +164,11 @@ private OAuth2AuthenticatedPrincipal convertClaimsSet(Map<String, Object> claims
163164
// may be awkward to debug, we do not want to manipulate this value. Previous
164165
// versions of Spring Security
165166
// would *only* allow valid URLs, which is not what we wish to achieve here.
166-
claims.computeIfPresent(OAuth2IntrospectionClaimNames.ISSUER, (k, v) -> v.toString());
167-
claims.computeIfPresent(OAuth2IntrospectionClaimNames.NOT_BEFORE,
167+
claims.computeIfPresent(OAuth2TokenIntrospectionClaimNames.ISS, (k, v) -> v.toString());
168+
claims.computeIfPresent(OAuth2TokenIntrospectionClaimNames.NBF,
168169
(k, v) -> Instant.ofEpochSecond(((Number) v).longValue()));
169170
Collection<GrantedAuthority> authorities = new ArrayList<>();
170-
claims.computeIfPresent(OAuth2IntrospectionClaimNames.SCOPE, (k, v) -> {
171+
claims.computeIfPresent(OAuth2TokenIntrospectionClaimNames.SCOPE, (k, v) -> {
171172
if (v instanceof String) {
172173
Collection<String> scopes = Arrays.asList(((String) v).split(" "));
173174
for (String scope : scopes) {

oauth2/oauth2-resource-server/src/test/java/org/springframework/security/oauth2/server/resource/introspection/SpringReactiveOpaqueTokenIntrospectorTests.java

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
import org.springframework.http.HttpStatus;
3838
import org.springframework.http.MediaType;
3939
import org.springframework.security.oauth2.core.OAuth2AuthenticatedPrincipal;
40+
import org.springframework.security.oauth2.core.OAuth2TokenIntrospectionClaimNames;
4041
import org.springframework.web.reactive.function.client.ClientResponse;
4142
import org.springframework.web.reactive.function.client.WebClient;
4243

@@ -106,18 +107,19 @@ public void authenticateWhenActiveTokenThenOk() throws Exception {
106107
SpringReactiveOpaqueTokenIntrospector introspectionClient = new SpringReactiveOpaqueTokenIntrospector(
107108
introspectUri, CLIENT_ID, CLIENT_SECRET);
108109
OAuth2AuthenticatedPrincipal authority = introspectionClient.introspect("token").block();
110+
assertThat(authority).isNotNull();
109111
// @formatter:off
110112
assertThat(authority.getAttributes())
111113
.isNotNull()
112-
.containsEntry(OAuth2IntrospectionClaimNames.ACTIVE, true)
113-
.containsEntry(OAuth2IntrospectionClaimNames.AUDIENCE,
114+
.containsEntry(OAuth2TokenIntrospectionClaimNames.ACTIVE, true)
115+
.containsEntry(OAuth2TokenIntrospectionClaimNames.AUD,
114116
Arrays.asList("https://protected.example.net/resource"))
115-
.containsEntry(OAuth2IntrospectionClaimNames.CLIENT_ID, "l238j323ds-23ij4")
116-
.containsEntry(OAuth2IntrospectionClaimNames.EXPIRES_AT, Instant.ofEpochSecond(1419356238))
117-
.containsEntry(OAuth2IntrospectionClaimNames.ISSUER, "https://server.example.com/")
118-
.containsEntry(OAuth2IntrospectionClaimNames.SCOPE, Arrays.asList("read", "write", "dolphin"))
119-
.containsEntry(OAuth2IntrospectionClaimNames.SUBJECT, "Z5O3upPC88QrAjx00dis")
120-
.containsEntry(OAuth2IntrospectionClaimNames.USERNAME, "jdoe")
117+
.containsEntry(OAuth2TokenIntrospectionClaimNames.CLIENT_ID, "l238j323ds-23ij4")
118+
.containsEntry(OAuth2TokenIntrospectionClaimNames.EXP, Instant.ofEpochSecond(1419356238))
119+
.containsEntry(OAuth2TokenIntrospectionClaimNames.ISS, "https://server.example.com/")
120+
.containsEntry(OAuth2TokenIntrospectionClaimNames.SCOPE, Arrays.asList("read", "write", "dolphin"))
121+
.containsEntry(OAuth2TokenIntrospectionClaimNames.SUB, "Z5O3upPC88QrAjx00dis")
122+
.containsEntry(OAuth2TokenIntrospectionClaimNames.USERNAME, "jdoe")
121123
.containsEntry("extension_field", "twenty-seven");
122124
// @formatter:on
123125
}
@@ -149,21 +151,22 @@ public void authenticateWhenInactiveTokenThenInvalidToken() {
149151
@Test
150152
public void authenticateWhenActiveTokenThenParsesValuesInResponse() {
151153
Map<String, Object> introspectedValues = new HashMap<>();
152-
introspectedValues.put(OAuth2IntrospectionClaimNames.ACTIVE, true);
153-
introspectedValues.put(OAuth2IntrospectionClaimNames.AUDIENCE, Arrays.asList("aud"));
154-
introspectedValues.put(OAuth2IntrospectionClaimNames.NOT_BEFORE, 29348723984L);
154+
introspectedValues.put(OAuth2TokenIntrospectionClaimNames.ACTIVE, true);
155+
introspectedValues.put(OAuth2TokenIntrospectionClaimNames.AUD, Arrays.asList("aud"));
156+
introspectedValues.put(OAuth2TokenIntrospectionClaimNames.NBF, 29348723984L);
155157
WebClient webClient = mockResponse(introspectedValues);
156158
SpringReactiveOpaqueTokenIntrospector introspectionClient = new SpringReactiveOpaqueTokenIntrospector(
157159
INTROSPECTION_URL, webClient);
158160
OAuth2AuthenticatedPrincipal authority = introspectionClient.introspect("token").block();
161+
assertThat(authority).isNotNull();
159162
// @formatter:off
160163
assertThat(authority.getAttributes())
161164
.isNotNull()
162-
.containsEntry(OAuth2IntrospectionClaimNames.ACTIVE, true)
163-
.containsEntry(OAuth2IntrospectionClaimNames.AUDIENCE, Arrays.asList("aud"))
164-
.containsEntry(OAuth2IntrospectionClaimNames.NOT_BEFORE, Instant.ofEpochSecond(29348723984L))
165-
.doesNotContainKey(OAuth2IntrospectionClaimNames.CLIENT_ID)
166-
.doesNotContainKey(OAuth2IntrospectionClaimNames.SCOPE);
165+
.containsEntry(OAuth2TokenIntrospectionClaimNames.ACTIVE, true)
166+
.containsEntry(OAuth2TokenIntrospectionClaimNames.AUD, Arrays.asList("aud"))
167+
.containsEntry(OAuth2TokenIntrospectionClaimNames.NBF, Instant.ofEpochSecond(29348723984L))
168+
.doesNotContainKey(OAuth2TokenIntrospectionClaimNames.CLIENT_ID)
169+
.doesNotContainKey(OAuth2TokenIntrospectionClaimNames.SCOPE);
167170
// @formatter:on
168171
}
169172

@@ -234,6 +237,7 @@ private WebClient mockResponse(Map<String, Object> response) {
234237
return webClient;
235238
}
236239

240+
@SuppressWarnings("unchecked")
237241
private Map<String, Object> toMap(String string) {
238242
try {
239243
return this.mapper.readValue(string, Map.class);

0 commit comments

Comments
 (0)