diff --git a/openid-connect-common/src/main/java/org/mitre/jwt/model/ClaimSet.java b/openid-connect-common/src/main/java/org/mitre/jwt/model/ClaimSet.java index 5e0686424..8eeeb7bfc 100644 --- a/openid-connect-common/src/main/java/org/mitre/jwt/model/ClaimSet.java +++ b/openid-connect-common/src/main/java/org/mitre/jwt/model/ClaimSet.java @@ -86,7 +86,10 @@ public class ClaimSet { * Set a primitive claim */ public void setClaim(String key, JsonPrimitive prim) { - if (prim.isBoolean()) { + if (prim == null) { + // in case we get here with a primitive null + claims.put(key, prim); + } else if (prim.isBoolean()) { claims.put(key, prim.getAsBoolean()); } else if (prim.isNumber()) { claims.put(key, prim.getAsNumber()); @@ -160,7 +163,10 @@ public class ClaimSet { */ public void loadFromJsonObject(JsonObject json) { for (Entry<String, JsonElement> element : json.entrySet()) { - if (element.getValue().isJsonPrimitive()){ + if (element.getValue().isJsonNull()) { + // nulls get stored as java nulls + setClaim(element.getKey(), null); + } else if (element.getValue().isJsonPrimitive()){ // we handle all primitives in here JsonPrimitive prim = element.getValue().getAsJsonPrimitive(); setClaim(element.getKey(), prim); diff --git a/openid-connect-common/src/main/java/org/mitre/jwt/model/JwtClaims.java b/openid-connect-common/src/main/java/org/mitre/jwt/model/JwtClaims.java index 042efb5bf..ae633a56d 100644 --- a/openid-connect-common/src/main/java/org/mitre/jwt/model/JwtClaims.java +++ b/openid-connect-common/src/main/java/org/mitre/jwt/model/JwtClaims.java @@ -45,7 +45,9 @@ public class JwtClaims extends ClaimSet { JsonObject pass = new JsonObject(); for (Entry<String, JsonElement> element : json.entrySet()) { - if (element.getKey().equals(EXPIRATION)) { + if (element.getValue().isJsonNull()) { + pass.add(element.getKey(), element.getValue()); + } else if (element.getKey().equals(EXPIRATION)) { setExpiration(new Date(element.getValue().getAsLong() * 1000L)); } else if (element.getKey().equals(NOT_BEFORE)) { setNotBefore(new Date(element.getValue().getAsLong() * 1000L)); diff --git a/openid-connect-common/src/main/java/org/mitre/jwt/model/JwtHeader.java b/openid-connect-common/src/main/java/org/mitre/jwt/model/JwtHeader.java index 99c4b5767..ca0aae931 100644 --- a/openid-connect-common/src/main/java/org/mitre/jwt/model/JwtHeader.java +++ b/openid-connect-common/src/main/java/org/mitre/jwt/model/JwtHeader.java @@ -43,7 +43,9 @@ public class JwtHeader extends ClaimSet { JsonObject pass = new JsonObject(); for (Entry<String, JsonElement> element : json.entrySet()) { - if (element.getKey().equals(TYPE)) { + if (element.getValue().isJsonNull()) { + pass.add(element.getKey(), element.getValue()); + } else if (element.getKey().equals(TYPE)) { this.setType(json.get(TYPE).getAsString()); } else if (element.getKey().equals(ALGORITHM)) { this.setAlgorithm(json.get(ALGORITHM).getAsString()); @@ -54,7 +56,7 @@ public class JwtHeader extends ClaimSet { } } - // now load all the ones we didn't handly specially + // now load all the ones we didn't handle specially super.loadFromJsonObject(pass); } diff --git a/openid-connect-common/src/main/java/org/mitre/openid/connect/model/IdTokenClaims.java b/openid-connect-common/src/main/java/org/mitre/openid/connect/model/IdTokenClaims.java index cdd39277d..30c6d9799 100644 --- a/openid-connect-common/src/main/java/org/mitre/openid/connect/model/IdTokenClaims.java +++ b/openid-connect-common/src/main/java/org/mitre/openid/connect/model/IdTokenClaims.java @@ -134,7 +134,9 @@ public class IdTokenClaims extends JwtClaims { JsonObject pass = new JsonObject(); for (Entry<String, JsonElement> element : json.entrySet()) { - if (element.getKey().equals(USER_ID)) { + if (element.getValue().isJsonNull()) { + pass.add(element.getKey(), element.getValue()); + } else if (element.getKey().equals(USER_ID)) { setUserId(element.getValue().getAsString()); } else if (element.getKey().equals(AUTHENTICATION_CONTEXT_CLASS_REFERENCE)) { setAuthContext(element.getValue().getAsString()); diff --git a/openid-connect-server/src/main/java/org/mitre/openid/connect/token/ConnectAuthCodeTokenGranter.java b/openid-connect-server/src/main/java/org/mitre/openid/connect/token/ConnectAuthCodeTokenGranter.java index 15adc4f4c..8ea0ee064 100644 --- a/openid-connect-server/src/main/java/org/mitre/openid/connect/token/ConnectAuthCodeTokenGranter.java +++ b/openid-connect-server/src/main/java/org/mitre/openid/connect/token/ConnectAuthCodeTokenGranter.java @@ -145,7 +145,7 @@ public class ConnectAuthCodeTokenGranter implements TokenGranter { token.getJwt().getClaims().setIssuedAt(new Date()); // handle expiration - //token.getJwt().getClaims().setExpiration(token.getExpiration()); + token.getJwt().getClaims().setExpiration(token.getExpiration()); /** * Authorization request scope MUST include "openid", but access token request