Skip to content

Commit cdc902d

Browse files
committed
Update SpringOpaqueTokenIntrospector
Issue gh-9647
1 parent 3ff8255 commit cdc902d

File tree

2 files changed

+27
-25
lines changed

2 files changed

+27
-25
lines changed

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

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
import org.springframework.security.core.GrantedAuthority;
4141
import org.springframework.security.core.authority.SimpleGrantedAuthority;
4242
import org.springframework.security.oauth2.core.OAuth2AuthenticatedPrincipal;
43+
import org.springframework.security.oauth2.core.OAuth2TokenIntrospectionClaimNames;
4344
import org.springframework.util.Assert;
4445
import org.springframework.util.LinkedMultiValueMap;
4546
import org.springframework.util.MultiValueMap;
@@ -158,7 +159,7 @@ private Map<String, Object> adaptToNimbusResponse(ResponseEntity<Map<String, Obj
158159
Map<String, Object> claims = responseEntity.getBody();
159160
// relying solely on the authorization server to validate this token (not checking
160161
// 'exp', for example)
161-
boolean active = (boolean) claims.compute(OAuth2IntrospectionClaimNames.ACTIVE, (k, v) -> {
162+
boolean active = (boolean) claims.compute(OAuth2TokenIntrospectionClaimNames.ACTIVE, (k, v) -> {
162163
if (v instanceof String) {
163164
return Boolean.parseBoolean((String) v);
164165
}
@@ -175,22 +176,22 @@ private Map<String, Object> adaptToNimbusResponse(ResponseEntity<Map<String, Obj
175176
}
176177

177178
private OAuth2AuthenticatedPrincipal convertClaimsSet(Map<String, Object> claims) {
178-
claims.computeIfPresent(OAuth2IntrospectionClaimNames.AUDIENCE, (k, v) -> {
179+
claims.computeIfPresent(OAuth2TokenIntrospectionClaimNames.AUD, (k, v) -> {
179180
if (v instanceof String) {
180181
return Collections.singletonList(v);
181182
}
182183
return v;
183184
});
184-
claims.computeIfPresent(OAuth2IntrospectionClaimNames.CLIENT_ID, (k, v) -> v.toString());
185-
claims.computeIfPresent(OAuth2IntrospectionClaimNames.EXPIRES_AT,
185+
claims.computeIfPresent(OAuth2TokenIntrospectionClaimNames.CLIENT_ID, (k, v) -> v.toString());
186+
claims.computeIfPresent(OAuth2TokenIntrospectionClaimNames.EXP,
186187
(k, v) -> Instant.ofEpochSecond(((Number) v).longValue()));
187-
claims.computeIfPresent(OAuth2IntrospectionClaimNames.ISSUED_AT,
188+
claims.computeIfPresent(OAuth2TokenIntrospectionClaimNames.IAT,
188189
(k, v) -> Instant.ofEpochSecond(((Number) v).longValue()));
189-
claims.computeIfPresent(OAuth2IntrospectionClaimNames.ISSUER, (k, v) -> issuer(v.toString()));
190-
claims.computeIfPresent(OAuth2IntrospectionClaimNames.NOT_BEFORE,
190+
claims.computeIfPresent(OAuth2TokenIntrospectionClaimNames.ISS, (k, v) -> issuer(v.toString()));
191+
claims.computeIfPresent(OAuth2TokenIntrospectionClaimNames.NBF,
191192
(k, v) -> Instant.ofEpochSecond(((Number) v).longValue()));
192193
Collection<GrantedAuthority> authorities = new ArrayList<>();
193-
claims.computeIfPresent(OAuth2IntrospectionClaimNames.SCOPE, (k, v) -> {
194+
claims.computeIfPresent(OAuth2TokenIntrospectionClaimNames.SCOPE, (k, v) -> {
194195
if (v instanceof String) {
195196
Collection<String> scopes = Arrays.asList(((String) v).split(" "));
196197
for (String scope : scopes) {
@@ -209,7 +210,7 @@ private URL issuer(String uri) {
209210
}
210211
catch (Exception ex) {
211212
throw new OAuth2IntrospectionException(
212-
"Invalid " + OAuth2IntrospectionClaimNames.ISSUER + " value: " + uri);
213+
"Invalid " + OAuth2TokenIntrospectionClaimNames.ISS + " value: " + uri);
213214
}
214215
}
215216

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

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
import org.springframework.http.RequestEntity;
4242
import org.springframework.http.ResponseEntity;
4343
import org.springframework.security.oauth2.core.OAuth2AuthenticatedPrincipal;
44+
import org.springframework.security.oauth2.core.OAuth2TokenIntrospectionClaimNames;
4445
import org.springframework.web.client.RestOperations;
4546

4647
import static org.assertj.core.api.Assertions.assertThat;
@@ -144,15 +145,15 @@ public void introspectWhenActiveTokenThenOk() throws Exception {
144145
// @formatter:off
145146
assertThat(authority.getAttributes())
146147
.isNotNull()
147-
.containsEntry(OAuth2IntrospectionClaimNames.ACTIVE, true)
148-
.containsEntry(OAuth2IntrospectionClaimNames.AUDIENCE,
148+
.containsEntry(OAuth2TokenIntrospectionClaimNames.ACTIVE, true)
149+
.containsEntry(OAuth2TokenIntrospectionClaimNames.AUD,
149150
Arrays.asList("https://protected.example.net/resource"))
150-
.containsEntry(OAuth2IntrospectionClaimNames.CLIENT_ID, "l238j323ds-23ij4")
151-
.containsEntry(OAuth2IntrospectionClaimNames.EXPIRES_AT, Instant.ofEpochSecond(1419356238))
152-
.containsEntry(OAuth2IntrospectionClaimNames.ISSUER, new URL("https://server.example.com/"))
153-
.containsEntry(OAuth2IntrospectionClaimNames.SCOPE, Arrays.asList("read", "write", "dolphin"))
154-
.containsEntry(OAuth2IntrospectionClaimNames.SUBJECT, "Z5O3upPC88QrAjx00dis")
155-
.containsEntry(OAuth2IntrospectionClaimNames.USERNAME, "jdoe")
151+
.containsEntry(OAuth2TokenIntrospectionClaimNames.CLIENT_ID, "l238j323ds-23ij4")
152+
.containsEntry(OAuth2TokenIntrospectionClaimNames.EXP, Instant.ofEpochSecond(1419356238))
153+
.containsEntry(OAuth2TokenIntrospectionClaimNames.ISS, new URL("https://server.example.com/"))
154+
.containsEntry(OAuth2TokenIntrospectionClaimNames.SCOPE, Arrays.asList("read", "write", "dolphin"))
155+
.containsEntry(OAuth2TokenIntrospectionClaimNames.SUB, "Z5O3upPC88QrAjx00dis")
156+
.containsEntry(OAuth2TokenIntrospectionClaimNames.USERNAME, "jdoe")
156157
.containsEntry("extension_field", "twenty-seven");
157158
// @formatter:on
158159
}
@@ -186,9 +187,9 @@ public void introspectWhenInactiveTokenThenInvalidToken() {
186187
@Test
187188
public void introspectWhenActiveTokenThenParsesValuesInResponse() {
188189
Map<String, Object> introspectedValues = new HashMap<>();
189-
introspectedValues.put(OAuth2IntrospectionClaimNames.ACTIVE, true);
190-
introspectedValues.put(OAuth2IntrospectionClaimNames.AUDIENCE, Arrays.asList("aud"));
191-
introspectedValues.put(OAuth2IntrospectionClaimNames.NOT_BEFORE, 29348723984L);
190+
introspectedValues.put(OAuth2TokenIntrospectionClaimNames.ACTIVE, true);
191+
introspectedValues.put(OAuth2TokenIntrospectionClaimNames.AUD, Arrays.asList("aud"));
192+
introspectedValues.put(OAuth2TokenIntrospectionClaimNames.NBF, 29348723984L);
192193
RestOperations restOperations = mock(RestOperations.class);
193194
OpaqueTokenIntrospector introspectionClient = new SpringOpaqueTokenIntrospector(INTROSPECTION_URL,
194195
restOperations);
@@ -198,11 +199,11 @@ public void introspectWhenActiveTokenThenParsesValuesInResponse() {
198199
// @formatter:off
199200
assertThat(authority.getAttributes())
200201
.isNotNull()
201-
.containsEntry(OAuth2IntrospectionClaimNames.ACTIVE, true)
202-
.containsEntry(OAuth2IntrospectionClaimNames.AUDIENCE, Arrays.asList("aud"))
203-
.containsEntry(OAuth2IntrospectionClaimNames.NOT_BEFORE, Instant.ofEpochSecond(29348723984L))
204-
.doesNotContainKey(OAuth2IntrospectionClaimNames.CLIENT_ID)
205-
.doesNotContainKey(OAuth2IntrospectionClaimNames.SCOPE);
202+
.containsEntry(OAuth2TokenIntrospectionClaimNames.ACTIVE, true)
203+
.containsEntry(OAuth2TokenIntrospectionClaimNames.AUD, Arrays.asList("aud"))
204+
.containsEntry(OAuth2TokenIntrospectionClaimNames.NBF, Instant.ofEpochSecond(29348723984L))
205+
.doesNotContainKey(OAuth2TokenIntrospectionClaimNames.CLIENT_ID)
206+
.doesNotContainKey(OAuth2TokenIntrospectionClaimNames.SCOPE);
206207
// @formatter:on
207208
}
208209

0 commit comments

Comments
 (0)