Skip to content

Commit 00ecd3d

Browse files
leonard84jricher
authored andcommitted
Fix NPE if no claims are requested for the userinfo object
This happens if clients only requests id_token claims, or just send an empty claims parameter. Change-Id: I8bd176ad271bda8a1e2f26b6221bd8e2d0a3ebfb
1 parent 141f4da commit 00ecd3d

File tree

1 file changed

+13
-12
lines changed

1 file changed

+13
-12
lines changed

openid-connect-server/src/main/java/org/mitre/openid/connect/view/UserInfoView.java

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -148,18 +148,8 @@ private JsonObject toJsonFromRequestObj(UserInfo ui, Set<String> scope, JsonObje
148148
Set<String> authorizedByClaims = new HashSet<>();
149149
Set<String> requestedByClaims = new HashSet<>();
150150

151-
if (authorizedClaims != null) {
152-
JsonObject userinfoAuthorized = authorizedClaims.getAsJsonObject().get("userinfo").getAsJsonObject();
153-
for (Entry<String, JsonElement> entry : userinfoAuthorized.getAsJsonObject().entrySet()) {
154-
authorizedByClaims.add(entry.getKey());
155-
}
156-
}
157-
if (requestedClaims != null) {
158-
JsonObject userinfoRequested = requestedClaims.getAsJsonObject().get("userinfo").getAsJsonObject();
159-
for (Entry<String, JsonElement> entry : userinfoRequested.getAsJsonObject().entrySet()) {
160-
requestedByClaims.add(entry.getKey());
161-
}
162-
}
151+
extractUserInfoClaimsIntoSet(authorizedClaims, authorizedByClaims);
152+
extractUserInfoClaimsIntoSet(requestedClaims, requestedByClaims);
163153

164154
// Filter claims by performing a manual intersection of claims that are allowed by the given scope, requested, and authorized.
165155
// We cannot use Sets.intersection() or similar because Entry<> objects will evaluate to being unequal if their values are
@@ -180,4 +170,15 @@ private JsonObject toJsonFromRequestObj(UserInfo ui, Set<String> scope, JsonObje
180170

181171
return result;
182172
}
173+
174+
private void extractUserInfoClaimsIntoSet(JsonObject claims, Set<String> target) {
175+
if (claims != null) {
176+
JsonObject userinfoAuthorized = claims.getAsJsonObject("userinfo");
177+
if (userinfoAuthorized != null) {
178+
for (Entry<String, JsonElement> entry : userinfoAuthorized.entrySet()) {
179+
target.add(entry.getKey());
180+
}
181+
}
182+
}
183+
}
183184
}

0 commit comments

Comments
 (0)