diff --git a/implementation/jwt-auth/src/main/java/io/smallrye/jwt/auth/principal/DefaultJWTCallerPrincipal.java b/implementation/jwt-auth/src/main/java/io/smallrye/jwt/auth/principal/DefaultJWTCallerPrincipal.java index c30b2bb5..cef77b40 100644 --- a/implementation/jwt-auth/src/main/java/io/smallrye/jwt/auth/principal/DefaultJWTCallerPrincipal.java +++ b/implementation/jwt-auth/src/main/java/io/smallrye/jwt/auth/principal/DefaultJWTCallerPrincipal.java @@ -107,7 +107,10 @@ protected Object getClaimValue(String claimName) { case nbf: case updated_at: try { - claim = claimsSet.getClaimValue(claimType.name(), Long.class); + Number numberClaim = claimsSet.getClaimValue(claimType.name(), Number.class); + if (numberClaim != null) { + claim = numberClaim.longValue(); + } if (claim == null) { claim = 0L; } diff --git a/testsuite/basic/src/test/java/io/smallrye/jwt/auth/principal/DefaultJWTCallerPrincipalTest.java b/testsuite/basic/src/test/java/io/smallrye/jwt/auth/principal/DefaultJWTCallerPrincipalTest.java index dfd3cb9b..edf8fa93 100644 --- a/testsuite/basic/src/test/java/io/smallrye/jwt/auth/principal/DefaultJWTCallerPrincipalTest.java +++ b/testsuite/basic/src/test/java/io/smallrye/jwt/auth/principal/DefaultJWTCallerPrincipalTest.java @@ -9,6 +9,7 @@ import org.eclipse.microprofile.jwt.Claims; import org.eclipse.microprofile.jwt.tck.util.TokenUtils; +import org.jose4j.jwt.JwtClaims; import org.jose4j.jwt.consumer.JwtContext; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -57,4 +58,24 @@ void getAudienceClaim() { assertEquals(1, audience.size()); assertArrayEquals(new String[] { TCK_TOKEN1_AUD }, audience.toArray(new String[0])); } + + @Test + void claimsWithDecimalValues() { + Double exp = 1311281970.5; + Double iat = 1311280970.5; + + final JwtClaims claims = context.getJwtClaims(); + claims.setClaim(Claims.exp.name(), exp); + claims.setClaim(Claims.iat.name(), iat); + DefaultJWTCallerPrincipal principal = new DefaultJWTCallerPrincipal(claims); + + Long expClaim = principal.getExpirationTime(); + Long iatClaim = principal.getIssuedAtTime(); + + assertNotNull(expClaim); + assertNotNull(iatClaim); + + assertEquals(exp.longValue(), expClaim); + assertEquals(iat.longValue(), iatClaim); + } }