Skip to content

Commit c22a7b4

Browse files
committed
Align quarkus-test-security-jwt with how smallrye-jwt currently handles some unknown claims
1 parent e31bb9a commit c22a7b4

File tree

2 files changed

+30
-4
lines changed

2 files changed

+30
-4
lines changed

test-framework/security-jwt/src/main/java/io/quarkus/test/security/jwt/JwtTestSecurityIdentityAugmentor.java

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import jakarta.json.JsonArray;
1313
import jakarta.json.JsonObject;
1414
import jakarta.json.JsonReader;
15+
import jakarta.json.JsonValue;
1516

1617
import org.eclipse.microprofile.jwt.Claims;
1718
import org.eclipse.microprofile.jwt.JsonWebToken;
@@ -63,7 +64,7 @@ public <T> T getClaim(String claimName) {
6364
if (jwtSecurity != null && jwtSecurity.claims() != null) {
6465
for (Claim claim : jwtSecurity.claims()) {
6566
if (claim.key().equals(claimName)) {
66-
return convertClaimValue(claim);
67+
return (T) wrapValue(claim, convertClaimValue(claim));
6768
}
6869
}
6970
}
@@ -92,6 +93,30 @@ private static JwtSecurity findJwtSecurity(Annotation[] annotations) {
9293
return null;
9394
}
9495

96+
private Object wrapValue(Claim claim, Object convertedClaimValue) {
97+
Claims claimType = getClaimType(claim.key());
98+
if (Claims.UNKNOWN == claimType) {
99+
if (convertedClaimValue instanceof Long) {
100+
return Json.createValue((Long) convertedClaimValue);
101+
} else if (convertedClaimValue instanceof Integer) {
102+
return Json.createValue((Integer) convertedClaimValue);
103+
} else if (convertedClaimValue instanceof Boolean) {
104+
return (Boolean) convertedClaimValue ? JsonValue.TRUE : JsonValue.FALSE;
105+
}
106+
}
107+
return convertedClaimValue;
108+
}
109+
110+
protected Claims getClaimType(String claimName) {
111+
Claims claimType;
112+
try {
113+
claimType = Claims.valueOf(claimName);
114+
} catch (IllegalArgumentException e) {
115+
claimType = Claims.UNKNOWN;
116+
}
117+
return claimType;
118+
}
119+
95120
@SuppressWarnings("unchecked")
96121
private <T> T convertClaimValue(Claim claim) {
97122
if (claim.type() != Object.class) {

test-framework/security-jwt/src/test/java/io/quarkus/test/security/jwt/JwtTestSecurityIdentityAugmentorTest.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,16 @@
11
package io.quarkus.test.security.jwt;
22

33
import static org.junit.jupiter.api.Assertions.assertEquals;
4-
import static org.junit.jupiter.api.Assertions.assertFalse;
54
import static org.junit.jupiter.api.Assertions.assertTrue;
65

76
import java.lang.annotation.Annotation;
87
import java.security.Principal;
98
import java.util.Set;
109

1110
import jakarta.json.JsonArray;
11+
import jakarta.json.JsonNumber;
1212
import jakarta.json.JsonObject;
13+
import jakarta.json.JsonValue;
1314

1415
import org.eclipse.microprofile.jwt.Claims;
1516
import org.eclipse.microprofile.jwt.JsonWebToken;
@@ -57,10 +58,10 @@ public String getName() {
5758
assertEquals(123456788, jwt.getIssuedAtTime());
5859
assertEquals(123456787, (Long) jwt.getClaim(Claims.nbf.name()));
5960
assertEquals(123456786, (Long) jwt.getClaim(Claims.auth_time.name()));
60-
assertEquals(123456785, (Long) jwt.getClaim("customlong"));
61+
assertEquals(123456785, ((JsonNumber) jwt.getClaim("customlong")).longValue());
6162
assertEquals("[email protected]", jwt.getClaim(Claims.email));
6263
assertTrue((Boolean) jwt.getClaim(Claims.email_verified.name()));
63-
assertFalse((Boolean) jwt.getClaim("email_checked"));
64+
assertEquals(JsonValue.FALSE, jwt.getClaim("email_checked"));
6465

6566
JsonArray array = jwt.getClaim("jsonarray_claim");
6667
assertEquals("1", array.getString(0));

0 commit comments

Comments
 (0)