Skip to content

Commit 5b777dd

Browse files
fix: simplify iss claim validation and add test for blank issuer
1 parent 2e4f2ed commit 5b777dd

File tree

2 files changed

+23
-21
lines changed

2 files changed

+23
-21
lines changed

oauth2-authorization-server/src/main/java/org/springframework/security/oauth2/server/authorization/OAuth2TokenIntrospection.java

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -327,24 +327,10 @@ private void acceptClaimValues(String name, Consumer<List<String>> valuesConsume
327327
}
328328

329329
private static void validateIssuer(Object url, String errorMessage) {
330-
if (URL.class.isAssignableFrom(url.getClass())) {
331-
return;
332-
}
333-
334330
String str = url.toString();
335-
if (str.isEmpty()) {
331+
if (str.isBlank()) {
336332
throw new IllegalArgumentException(errorMessage);
337333
}
338-
339-
try {
340-
// Try parsing as URI
341-
new URI(str);
342-
// If this succeeds, it’s a valid URI
343-
}
344-
catch (Exception ex) {
345-
// If parsing fails, allow plain string (fix for iss claim)
346-
// Only log/debug if needed, no exception thrown
347-
}
348334
}
349335

350336
}

oauth2-authorization-server/src/test/java/org/springframework/security/oauth2/server/authorization/OAuth2TokenIntrospectionTests.java

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,24 +5,28 @@
55

66
import java.util.List;
77

8+
import static org.assertj.core.api.Assertions.assertThat;
9+
import static org.assertj.core.api.Assertions.assertThatCode;
10+
import static org.assertj.core.api.Assertions.assertThatThrownBy;
11+
812
public class OAuth2TokenIntrospectionTests {
913

1014
@Test
1115
void buildWhenIssuerIsNonUriStringThenDoesNotThrow() {
1216
String issuer = "client-id-123"; // plain string, not a URI
1317

14-
org.assertj.core.api.Assertions.assertThatCode(() -> {
18+
assertThatCode(() -> {
1519
OAuth2TokenIntrospection token =
1620
OAuth2TokenIntrospection.builder(true)
1721
.issuer(issuer)
1822
.subject("user-123")
1923
.build();
2024

2125
Object issClaim = token.getClaim(OAuth2TokenIntrospectionClaimNames.ISS);
22-
org.assertj.core.api.Assertions.assertThat(issClaim).isEqualTo(issuer);
26+
assertThat(issClaim).isEqualTo(issuer);
2327

2428
Object activeClaim = token.getClaim(OAuth2TokenIntrospectionClaimNames.ACTIVE);
25-
org.assertj.core.api.Assertions.assertThat(activeClaim).isEqualTo(true);
29+
assertThat(activeClaim).isEqualTo(true);
2630
}).doesNotThrowAnyException();
2731
}
2832

@@ -37,10 +41,10 @@ void buildWhenIssuerIsValidUriThenAcceptsIssuer() {
3741
.build();
3842

3943
Object issClaim = token.getClaim(OAuth2TokenIntrospectionClaimNames.ISS);
40-
org.assertj.core.api.Assertions.assertThat(issClaim).isEqualTo(issuer);
44+
assertThat(issClaim).isEqualTo(issuer);
4145

4246
Object activeClaim = token.getClaim(OAuth2TokenIntrospectionClaimNames.ACTIVE);
43-
org.assertj.core.api.Assertions.assertThat(activeClaim).isEqualTo(true);
47+
assertThat(activeClaim).isEqualTo(true);
4448
}
4549

4650
@Test
@@ -52,6 +56,18 @@ void buildWithMultipleScopes() {
5256
.build();
5357

5458
List<String> scopes = (List<String>) token.getClaim(OAuth2TokenIntrospectionClaimNames.SCOPE);
55-
org.assertj.core.api.Assertions.assertThat(scopes).containsExactly("read", "write");
59+
assertThat(scopes).containsExactly("read", "write");
60+
}
61+
62+
@Test
63+
void buildWhenIssuerIsBlankThenThrowsException() {
64+
String issuer = " "; // blank string
65+
66+
assertThatThrownBy(() ->
67+
OAuth2TokenIntrospection.builder(true)
68+
.issuer(issuer)
69+
.subject("user-123")
70+
.build()
71+
).isInstanceOf(IllegalArgumentException.class);
5672
}
5773
}

0 commit comments

Comments
 (0)